C++语言应尽量使用vector和迭代器类型,应避免使用低级的数组和指针,涉及良好的程序只有在强调速度时才在类实现的内部使用数组和指针。因此要向成为一个真正的C++程序员就要多使用vector和string来替代数组和c风格字符串。
数组的维数必须用整型常量指定,非const类型或是到运行时才知道其值的const变量都不能用于定义数组的维数。
在没有显式提供元素的初始时数组元素会像普通元素一样初始化。若在函数体外定义的数组,所有元素将会被初始化为0,若是在函数体外定义的数组,其元素不会被初始化。如果数组元素为类类型,无论数组在哪里定义,都会自动调用类的默认构造函数来初始化。如果类没有默认构造函数,则必须为数组的元素提供显式的初始化。这一点与vector类似。
与vector中的size_type类似,数组下标的正确类型为size_t;头指针和尾指针只差的正确类型为ptrdiff_t,它是signed类型。
使用指针不当易导致错误发生,应将未初始化的指针初始化为NULL,因为编译器可以测出0值的指针。这在一定程度上可以避免指针未初始化就使用的情况。
void*类型的指针可以存储任何类型的指针。它表明该指针与某一地址值相关,但不清楚存储在此地址上的对象的类型。void*类型的指针只支持几种有限的操作:1,与另一个指针比较2,向函数传递void*指针或是从函数中返回void*指针。3,给另一个void*指针赋值。但是不允许使用void*操作它指向的对象。
实际中常把指向const的指针用作函数形参,以此确保传递给该函数的实际对象不会再函数中被修改。这也说明了,指向const的指针,既可以指向const对象也可以指向非const对象。
使用const定义变量时,constinta;与intconsta;是等价的。这样就容易导致混淆。如
typedefint*IntPtr;
constIntPtrpp;
此时pp是什么类型呢。真正的类型应该是将pp定义为指向int类型的const指针。它等价于int*constpp;原因是在constIntPtrpp等价于IntPtrconstpp,const作用于IntPtr类型。而不是跟constinta一样作用于a。所以尽量写成IntPtrconstpp这种形式,此时便不会误会。
动态分配数组时可以在数组长度后面加一对空圆括号,对数组的元素进行初始化。此时数组元素都被初始化为0;如int*array=newint[10]();
创建const对象的动态数组时必须为数组元素提供初始化,因为数组元素都是const对象。如constint*array=newconstint[100]();
动态分配的数组空间要调用delete[]进行释放。漏用【】,编译器无法发现此错误,会导致少释放内存空间,导致内存泄露。
String成员函数c_str()返回const类型的数组指针,因此不能被修改。另外一旦string对象被改变,c_str()返回的数组就会变为无效,也就是说c_str()返回的数组是在调用函数时才对string对象内容的拷贝,并不实时反映string对象的内容。
可以使用数组为vector对象初始化。如inta[]={20,41,52,54,63,54,36};vector<int>v(a,a+7);两个指针标示出vector初值的范围,第二个指针指向数组最后一个元素的后一个地址空间。
区分指针数组与行指针。如int*ptr[10],此为指针数组,int(*ptr)[10]此为行数组,p为指向具有10个元素的数组的指针。
平时经常使用typedefint*ptr;来简化操作。但是对于typedefintint_array[4];很不熟悉,可以参照typedefint*ptr;来理解。Int_arrayp;定义一个具体有四个元素的数组。而int_array*p定义一个指向具有四个元素数组的行指针
分享到:
相关推荐
C++ primer plus 第五版的个人学习笔记,仅供大家学习参考。
C++ Primer 中文版(第四版)学习笔记~ C++ Primer 中文版(第四版)学习笔记~
C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。
C++primer第五版第二章习题答案.pdf
c++primer第五版中文版课后答案(第12章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
C++primer的笔记,可以看一下,一些容易犯错的陷阱
《C++ Primer Plus第6版中文版》学习笔记(第十章) 红字内容是有疑问或者没把握的。 绿字部分是比较重要,或者经过确认的
C++_Primer_中文版的学习笔记,C++_Primer全面介绍了 C++ 语言。作为一本入门书(Primer),它以教程的形式对 C++ 语言进行清晰的讲解,并辅以丰富的示例和各种学习辅助手段。
C++Primer 第四版课后习题解答(第1~18章完整答案)完整版 非扫描高清
c++primer第五版中文版课后答案(第17章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
c++primer第五版中文版课后答案(第18章)pdf格式,真正的c++primer习题集(第五版),用手机拍的,但是每个字都能看的很清楚
C++Primer第五版习题答案+详解(完整版) C++Primer第五版习题答案+详解(完整版)
牛人的c++primer学习笔记,c++基础学习必须看的,努力中。
C++ Primer 第四版学习笔记是本人2014年学习C++时的学习笔记,今天分享出来给初学者,让大家学习起来不在枯燥。需要的同学自行下载,大佬请绕道!
c++ primer第五版第6章答案
《C++ Primer》第五版中文版学习笔记,适合完整看过原书一遍以上的人员复习与查阅使用。对于基础较好的,也可直接适用。
c++primer学习心得 c++primer学习心得
C++ Primer 第五版(中文版) 第1~11章课后习题答案(附上代码)
锻炼自己的全英文C++ primer第五版电子版,更加适合于有一定代码功底人士阅读,初学者(你要读也很棒棒)阅读难度较大。
C++ Primer第五版 高清扫描pdf,压缩版,下载后解压即可