c语言,常量与指针

c语言,常量与指针

预想中的6种写法:

const * int p;	//error
const int * p;
int const * p;
int * const p;	
* int const p;	//error
* const int p;	//error
因为 *是右结合的;
const int *p;  ==  int const *p;		//const 修饰*p,即指针指向的值不可改,
int *const p;  相当于 *p  +   const p;  p保存的是地址,且p本身不能变。(指针指向不能变)

关于赋值(忽略语法问题):

指针指向是否可变能否用*p改值能否直接改a
const int *p = const int a
const int *p = int a
int *const p = const int a
int *const p = int a
int *p = int a
int *p = const int a
const int a = 1;
const int b = 2;
int c = 3;
int d = 4;
const int *p = &a;  //*p是 const  指向可变,内容不可变
printf("%d\n",*p);

//*p = 999;   error
p = &b;
printf("%d\n",*p);
p = &c;
printf("%d\n",*p);

指针指向是否可变,能否用*p改值由左边决定
能否直接改值由右边决定

问题:能否通过(没有限定指向一定要是常量的)指针改 常量
我最初的想法是不可以,我认为 左右两边要同时满足可以改值的条件才可以,但结果并不是这样:

结果是可以,出乎意料。
同样的:指向常量的指针指向非常量时,也可以直接改常量。如下:
在这里插入图片描述
c++中

int *const b;	//error		//c语言没有要求在定义时就一定要赋值
int *const b = &a;	//可以

必须在声明时赋初值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值