常量指针和指针常量的区别

29 篇文章 1 订阅

常量指针 和 指针常量 的区别

  • 指向常量的指针 = 常量指针

const int *p //常量指针
int const *p //常量指针
//const的位置在指针声明运算符*的左侧


  • 指针值不变的量 = 指针常量
int* const p //指针常量
//const的位置在指针声明运算符*的右侧


  • 指向常量的指针常量
const int * const p
//一个const的位置在指针声明运算符*的右侧,另一个const的位置在指针声明运算符*的左侧



借用别人的一个例子:


用一个例子作为总结。虽然字符指针与其它指针的本质是一样的,可是因为字符指针常用来表示字符串,常不好理解。下面就用字符指针来举例。


char *a = "abcde1234";


const char *b = "bcde"; // b是指向常量字符串的指针变量


char *const c = &a;  // c是指向字符指针变量的常量


const char *const d = &b; // d是指向字符常量的指针常量


问题来了。


1)问:因为a是变量,a可以赋值为其它值,如"12345abc"。那么c指向a,当a变化了,c指向什么呢?


答:仍然指向"abcde1234"。虽然a可以指向别的字符串,可是c仍然指向"abcde1234",也就是a开始指向的对象。


2)问:a是变量,可以改变a的内容。那么当执行了“a[0] = 'x';”后,c会怎样呢?


答:c当然还指向a初始指向的字符。不过,这个字符已经变成了'x'。


3)问:b是指向常量的指针变量,当b指向别的字符串,d怎么样?


答:d仍然指向b初始的字符串。


4)问:b可以变化,b指向的字符不能变化,也就是说b[0]不能被重新赋值,可是b[1]可以被重新赋值吗?


答:原则上b指向的字符是常量,并没有限制下一个字符,应该可以被赋值。可是因为你使用字符串进行了初始赋值,而且编译器是静态编译的,C/C++程序就把b当作字符串指针来处理了,因此,当对下一个字符进行赋值时,编译不能通过。


其他问题,欢迎补充。


我编了这样的口诀,记住,应该不难:


const(*号)左边放,我是指针变量指向常量;


const(*号)右边放,我是指针常量指向变量;


const(*号)两边放,我是指针常量指向常量;


指针变量能改指向,指针常量不能转向!


要是全都变成常量,锁死了,我不能转向,你也甭想变样!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值