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对象的指针

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值