C++ Primer 中文版 学习笔记(三)

第四章数组和指针

1、不允许数组直接复制和赋值。

2、现代C++程序更多地使用vector迭代器来取代数组,数组被         严格限制于程序内部使用,只有当性能测试表明使用vector无         法达到必要的速度要求时,才使用数组。

      采用string类型取代C风格字符串(以’\0’结束)

3、非const变量以及要到运行阶段才知道其值得const变量都不能用于定义数组的维数。

4、定义数组时,如果没有显示的提供元素初值,则数组元素会像普通变量一样初始化:

        1) 在函数体外定义的内置数组,其元素均初始化为0

        2) 在函数体内定义的内置数组,其元素无初始化

        3) 不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;

        4) 如果该类没有默认构造函数,则必须为该数组的元素提供显示初始化。

        5) 显示初始化的数组不需要制定数组的维数值,编译器会根据列出的元素个数来确定数组的长度。

5、void*指针只支持几种有限的操作:

        1.   与另一指针进行比较;

        2.   向函数传递void*指针;

        3.   从函数返回void*指针;

        4.   给另一个void*指针赋值。

         5.   不允许使用void*指针操纵它所指向的对象。

6、指针和引用的比较

虽然使用引用和指针都可间接访问另一个值,但它们之间有两个重要区别。

      第一个区别在于引用总是指向某个对象:定义引用时没有初始化式错误的。

      第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联

7C++允许计算数组或对象的超出末端的地址,但不允许对此地址进行解引用操作。

8C++语言强制要求指向const对象的指针也必须具有const特性。

9const型的指针一经定义,就不允许修改其所指对象的值。

         可以直接给该对象赋值或间接地利用普通的非const指针修改。

10、永远不要忘记字符串结束符null

 

11、使用数组初始化vector对象 

   使用数组初始化vector对象,必须指出用于初始化式的第一个元素以及数组最后一个元素的下一位置的地址。

   const size_t arr_size = 6;

   int int_arr[arr_size]={0,1,2,3,4,5};

   //ivec has 6 elements:each a copy of thecorresponding element in int_arr

   vector<int> ivec(int_arr,int_arr+arr_size);

 

 


没有更多推荐了,返回首页