1. 用const创建变量, 虽然 #define 指令可以创建类似功能的符号常量,但是const的用法更加灵活,可以创建const数组、 const指针和 指向 const的指针
const double PI = 3.14159;
2. 用const关键字保护数组
const int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; days[9] = 44; //不允许,编译错误
3. 指向 const 的指针不能改变值。指向const的指针通常用于函数形参中,表明该函数不会使用指针改变数据
double rates[5] = {88.99, 100.12, 59.45, 15.22, 54.33}; const double * pd = rates; *pd = 29.77; //不允许 pd[2] = 222.22; //不允许 rates[0] = 66.66; //允许,因为rates没有被const 限定 pd++ // 允许,让pd指向 rates[1]
4. 把 const 数据或者 非const 数据的地址初始化为 指向 const指针 或 为其赋值是合法的。
double rates[5] = {88.99, 100.12, 59.45, 15.22, 54.33}; const double locked[4] = {0.22, 0.55, 0.33, 0.66,}; const double * pc = rates; //有效 pc = locked; //有效 pc = &rates[3] //有效
5.只能把非const数据的地址赋给普通指针, 否则,通过指针就能改变const数组中的数据
double rates[5] = {88.99, 100.12, 59.45, 15.22, 54.33}; const double locked[4] = {0.22, 0.55, 0.33, 0.66,}; double * pnc = rates; //有效 pnc = locked; //无效 pnc = &rates[3] //有效
6.C标准规定,使用非const标识符修改const数据导致的结果是未定义的
7.const可以声明并初始化一个不能指向别处的指针, 关键是const的位置
double rates[5] = {88.99, 100.12, 59.45, 15.22, 54.33}; const double * const pc = rates; pc = &rates[2]; // 不允许 *pc = 92.99; //不允许