const指针和指向const对象的指针

目录

1.常量表达式

2.指针和引用的比较

3.指针和const限定符

4.数组


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();

猜你喜欢

转载自blog.csdn.net/qq_33457548/article/details/88212005