C++中常量指针和指针常量的区别

C++中常量指针和指针常量的区别

一、常量指针

常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量),也就是指向一个无法修改的量。

C++中常量指针定义为:const int* a,当然int const * a也可以,不过习惯用第一种了。

使用常量指针时要注意,指针指向的对象不能通过这个指针来修改,因为对象现在是常量了,不可以修改,例如:

int tmp = 65;

const int *c = &tmp; // 这是合法的,但是*c就必须指向tmp了

*c = 6; // 非法,指向内容是常量!常量!常量!,无法修改。

其实我们使用的系统函数中,许多参数都是const修饰的。例如,strcmp声明是这样的:

int strcmp(const char *str1, const char *str2);

其中str1和str2都是常量字符指针,可是这个函数却可以接收非常量字符串。例如这段程序:

char *str1, *str2;

str1 = "gggggg";

str2 = "bbbbbb";

str1和str2的内容显然是可以更改的,例如可以使用“str1[0] = b;”这样的语句把str1的内容由“ggggg”变为“bgggg“”。因为函数的参数声明用了常量指针的形式,就保证了在函数内部,一旦指向那个常量,指向内容就变成常量无法更改。所以对str1和str2的内容更改的操作在函数内部是不被允许的。

 

二、指针常量

指针常量的本质是一个常量,而用指针修饰它,指针无法修改,指针指向的内容可以修改。

在C/C++中,指针常量这样声明:

int a;

int *const b = &a; //此时const修饰a

只要const位于指针声明操作符右侧,就表明声明的对象是一个常量即b,且它的内容是一个指针,也就是一个地址。

因为指针常量是一个常量,在声明的时候一定要给它赋初始值。一旦赋值,以后这个常量再也不能指向别的地址,但是地址是的值可以改变。

char *a = “agafqawefga”;

char *b = "hdfafd"

int *const c = &b;

此时,c必须指向b,但是我们可以通过修改b上的值来修改c。

 

三、指针常量和常量指针

1,常量指针,是指向常量的指针,指针指向的内容无法修改,指针可以修改。

     指针常量,是一个常量,常量是指针,指针无法修改,指针指向的内容可以修改。

2,const char *p,const修饰(char  *),*p = 'b'非法,p =&q合法,

      char *const p = &b,const修饰(b),*p = 'b'合法,p = &q非法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值