学习C++primer心得08.6.25

来源:互联网 发布:软件开发企业资质 编辑:程序博客网 时间:2024/05/04 10:04

08.6.18

4.1第四章 数组和指针

int staff_size = 27;

double salaries[staff_size];     // error: non const variable

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

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

 

08.6.23

使用一组字符字面值初始化字符数组时,一定要记得添加结束字符串的空字符。例如,下面的初始化将导致编译时的错误:

const char ch3[6] = "Daniel"; // error: Daniel is 7 elements

08.6.24

string* ps1, ps2; // ps1 is a pointer to string,  ps2 is a string

string* ps1, *ps2; // both ps1 and ps2 are pointers to string

很多运行时错误都源于使用了未初始化的指针。

int 型变量赋给指针是非法的,尽管此 int 型变量的值可能为 0。但允许把数值 0 或在编译时可获得 0 值的 const 量赋给指针。

void* 表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。

void* 指针只支持几种有限的操作:与另一个指针进行比较;向函数传递 void* 指针或从函数返回 void* 指针;给另一个 void* 指针赋值。不允许使用 void* 指针操纵它所指向的对象。

第一个区别在于引用总是指向某个对象:定义引用时没有初始化是错误的。第二个重要区别则是赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经初始化,就始终指向同一个特定对象(这就是为什么引用必须在定义时初始化的原因)。

两个指针减法操作的结果是标准库类型(library typeptrdiff_t 的数据。

int *p = &ia[2];     // ok: p points to the element indexed by 2
int k = p[-2];       // ok: p[-2] is the same element as ia[0]

不能使用 void* 指针(第 4.2.2 )保存 const 对象的地址,而必须使用 const void* 类型的指针保存 const 对象的地址:

          const int universe = 42;
          const void *cpv = &universe; // ok: cpv is const
          void *pv = &universe;        // error: universe is const

允许把非 const 对象的地址赋给指向 const 对象的指针

const int ic = i ;

int *const cpi = ⁣//wrong

 

int ic = i ;

int *const cpi = ⁣//right

原创粉丝点击