CPP_Basic_Summary_0.4

CPP_Basic_Summary_0.4

1、编译器不会检查数组下标是否有效
2、sizeof用于数组名,则计算整个数组中的字节数,用于单个元素才会得到元素长度
3、数组未初始化前其元素值不确定,且定义后不可初始化,也不能数组间互相赋值;而string对象未初始化时长度为0。
4、如果只对数组的一部分初始化,如int shuzu[5] {0},则其余元素均被初始化为0
5、如果数组[]为空,则编译器将自动计算个数,应该视实际需要使用
6、初始化数组时可以省略=,直接{}
7、列表初始化禁止数据类型的缩窄转换
8、'\n'空字符一般被char字符数组视为字符串的结尾,空格、回车、换行符等
9、应该提前考虑防止数组长度溢出,C++对字符串长度没有限制
10、设计最短数组的时候,使用strlen()+1,因为不能忽视字符串结尾的'\0',它还可用于截断字符串数组
11、注意单引号和双引号的区别,""和'',一个是字符串,一个是字符常量
12、一个cout后面的多个“”会自动拼接,进而合成同一个字符串输出,且之间不会添加空格
13、建议使用符号常量来初始化数组,则以后更改的时候更为方便
14、对于数组name,可使用面向行的输入cin.getline(name,20);则最多读入19个字符,这种方式以换行符来确定行尾,但不保存换行符;而在存储字符串时,它用空字符替换换行符。也就是说,将enter键替换为"\0"
15、对于数组name,也可使用cin.get(name,20)来读取,但是会将换行符留在输入队列,使得下一次读取时候直接读取换行符导致以为到达字符串结尾而读取失败。故而推荐使用改进的方式,解决此问题的同时对过程的控制更准确:cin.get(name,20).get()
16、类似的,cin.getline(name1,20).getline(name2,20)相当于两次调用getline
17、如果使用的是cin.get(),则是仅仅读取一个字符,如果输入空行导致失效位被设置,使用cin.clear()解除即可;而getline()遇到字符串输入比分配数组长的时候也会设置失效位,并关闭后面的输入,同理即可解决。方式:必须首先重置cin以接受新的输入,其次删除错误的输入,最后再提示用户重新输入:

while (!(cin>>golf[i]))
{
    cin.clear();
    while (cin.get()!='\n')
        continue;//删除所有错误输入直到行尾
    cout<<"Please enter again.";
}

18、string类的本质依然是数组,而且string可自动调节字符串大小,且可列表初始化
19、string类可直接+-各字符串,实现直接赋值和拼接
20、如果包含了#include <cstring>头文件,可以使用strcpy(charr1,charr2)复制第二个字符串到第一个字符串,还可使用strcat(charr1,charr2)来将第二个字符串添加到第一个字符串结尾
21、C++11可使用如str1.size()来获取str1的长度,老式则使用strlen(str1)获取,此处不包括空字符
22、数组式的读取:cin.getline(charr,20);而string对象的读取:getline(cin,str1);
23、C++新增R"()"原始字符串,可以所见即所得,且"和(之间可加入如+这类来自定义需要的定界符
24、变量应限制于内部,但结构推荐使用外部声明,而且符号常量也适合外部声明
25、结构的初始化也可以使用列表初始化,如Fishx duck {"Tux",0.12,120};
26、结构的定义和初始化可以同时进行,但是推荐分开执行,结构的位字段用于低级编程
27、结构数组是以结构为元素的数组,如Fishx gifts[100];指针数组是以指针为元素的数组
28、共用体,每次只能使用一种格式,重新赋值后原始数据及其类型丢失,多用于节省内存
29、enum为枚举类型,如enum bits{Yes=1,No=0};可以显式赋值也可以默认0、1、2……
30、枚举可以成员单独+-数字,但是不可以互相加和,其中可以使用强制类型转换
31、枚举的范围:上限:大于最大值的最小的2的幂-1;下限:若大于等于0,为0,否则为小于最小值的最大的2的幂+1,并添负号。如最大枚举值101的上限为127,最小枚举值-6的下限为-7
32、使用指针时务必将其初始化为一个确定且适当的地址,如果要直接地址赋值,应该注意类型的问题,应使用如int
pt;pt=(int)0xB80000000;
33、new分配的内存位于自由存储区,也称为“堆”,且必须使用delete释放且只能释放new出的内存块;不释放new出的内存或者释放了不是new出的内存都将造成错误
34、对于返回指针的函数,使用另一个指针更恰当,delete 空指针是安全的
35、动态数组:int
psome=new int[10]即可,释放用delete [] psome,psome指向数组第一个元素,可用psome[0]
36、数组名实质为一个指针,指向数组第一个元素的地址,但具体用法也有不同之处,如对数组使用sizeof()得到的是数组长度,而对指针使用则会返回指针的长度;另外,对数组名取地址会得到整个数组的地址,尽管数组名指向第一个元素地址
37、注意,如(stack+1)和stack[1]是等价的,而且C++内部使用数组时会进行这样的转换
38、short tell[10];short (
pas) [20]=&tell;所以pas实际上是一个指向数组的指针,且()至关重要
39、指针+1等于在数组中指向元素的位置右移,-1就是左移,而当两个指针指向同一个数组的时候,作差的结果是个整数,即两个元素的间隔
40、C++中用引号括起的字符串和数组名一样,也是第一个元素的地址,C++不发送字符串,只发送字符串的地址
41、使用const定义在指针前时(如const char* bird="wren"),可以允许指针访问,但是不允许指针改变地址内的字符串
42、默认情况下cout<<一个指针将会打印地址,但是如果加了类似(char或int,取决于指针类型)将会打印指向的字符串
43、new动态结构时,指针ps使用->访问结构成员,而*ps使用.来访问结构成员,并务必注意别忘记使用delete

inflatable * ps=new inflatable;//动态结构指针
cin.get(ps->name,20);//指针法读取输入
cin>>(*ps).volume;//数组名引用法读取输入
cin>>ps->price;

44、可以使用以下语句设置恰当的内存:

char tmp[80];
cout<<"Enter  last name";
cin>>tmp;
char* pn=new char[strlen(tmp)+1];
strcpy(pn,tmp);
return pn;

45、C++使用自动存储(局部变量,使用栈,后进先出);静态存储(函数外定义或者使用static,存在于整个程序周期);动态存储(灵活,使用堆,可在A函数创建,B函数释放)。在栈中,内存的占用是连续的,而在堆中,new和delete的使用导致内存不连续,使得跟踪新分配的内存更加困难
46、注意各种类型的组合(完整代码参考P4.23)

antarctica_years_end s01, s02, s03;//三个结构变量
s01.year = 1998;//结构式赋值
antarctica_years_end *pa = &s02;//结构指针pa
pa->year = 1999;//指针式赋值
antarctica_years_end trio[3];//创建含三元素结构数组
trio[0].year = 2003;//结构数组访问成员
std::cout << trio->year << std::endl;
//输出结构数组第一个元素结构的year成员 2003
const antarctica_years_end *arp[3] = {&s01, &s02, &s03};//定义含3指针的指针数组
std::cout << arp[1]->year << std::endl;
//第二个元素,即&s02指向结构变量的year成员1999
const antarctica_years_end **ppa = arp;
//创建指向上一个指针数组的的指针
auto ppb=arp;
//或者使用const antarctica_years_end **ppb=arp
//ppa解除引用后,元素依为指针(毕竟为指针数组第一个元素)1998
std::cout<<(*(ppb+1))->year<<std::endl;
//ppb和ppa一样,故+1后指针右移一个元素为&s02,1999

47、const antarctica_years_end** ppb=arp;这类在C++11中可以使用auto ppb=arp;
48、模板类vector:new动态数组的替代品,存储于堆中,首先需要包含头文件#include <vector>,其次位于名称空间std中,最后是语法不同:vector<int> xv(5)包含五个元素
49、模板类array:长度固定数组的替代,更方便强大安全但是效率稍低,也使用栈静态分配内存,需要包含头文件#include <array>,需要名称空间,最后是语法不同:array<double,10> xv={0}包含十个元素,需要注意的是这里的元素数和vector不同,不能是变量。和数组不同之处:可以互相直接赋值
50、数组的不安全性在于可将信息存储到数组外部,比如a2[-2]=2.5;而vector和array的成员函数at()可以更准确控制,安全取决于自己写的代码:a2.at(1)=2.3将2.3赋给a2[1]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,419评论 3 44
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,497评论 1 51
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 3,870评论 2 13
  • 第一章 计算机与C++编程简介 C++程序6个阶段编程 ->预处理->编译->连接->装入->执行1.程序在编译器...
    rogertan30阅读 3,620评论 0 1
  • 不知不觉间中秋节就要到了,对于昨天刚进行完奖学金答辩的我们来说,今天似乎感概太多。 首先,就是那种被人碾压碎了的感...
    九尾小狐莉阅读 180评论 0 0