目录
1.常量表达式
const int n = 100;
int* a[n+1] = {0};
上面的n+1是常量表达式,编译时即可计算出结果。
2.指针和引用的比较
①引用总是指向某个对象,定义引用时必须初始化,从一而终。
②给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另外一个对象关联。
int val1= 1, val2 = 2;
int *ptr1 = &val1, *ptr2 = &val2;
p1 = p2; //p1指向p2
int &r1 = val1, &r2 = val2;
r1 = r2; //val1 = val2
3.指针和const限定符
① 指向const对象的指针
const double * val;
表示指针val本身不是const,而是其指向的对象为const,其指向的内容不可修改。
②允许非const对象的地址赋给指向const对象的指针
扫描二维码关注公众号,回复:
13301768 查看本文章

double val1 = 3.14;
const double * ptr = &val1; //val1不能再修改!!!
//但是val1可以通过以下方式修改
double * ptr1 = &val1;
*ptr1 = 1.11;
cout << *ptr << endl; //输出1.11
总结:指向const对象的指针,可以理解为自认为指向const的指针,如果对象是非const,可以通过上述方式修改其值。指向const对象的指针一般用在函数的形参中,用于说明在此子函数中不要改变其指针指向的内容。
③ const 指针:指不能改变其指针的值。
int val = 0;
int* const ptr = &val;
④指向const对象的const指针
const double val = 3.14;
const double *const ptr = & val;
⑤
typedef string *pstring;
const pstring cstr; //注意:等价于 string *const cstr;
4.数组
①用new进行动态分配数组,分配的长度可以为0,其分配返回的是一个非零指针。
②用c_str可以把string转换为char型
const char* str = str1.c_str();