const与指针

  1. 若const出现在*左边,则 *p只读 p 可写;
  2. 若const出现在*右边,则 *p可写 p 只读;
  3. 若两边均有const,则p和*p都只读;

魔性记忆法:

  1. const* 可理解记忆为const *p,*p为值,值不可变只读,p可写;
  2. *const 可理解为 const p,p 为地址,地址不可变,只读,*p可写;

程序代码:

zxf@zxf-virtual-machine:test$ vim 8_constpoint.c
zxf@zxf-virtual-machine:test$ gcc -o 8_constpoint 8_constpoint.c 
8_constpoint.c: In function ‘main’:
8_constpoint.c:9:19: warning: initialization from incompatible pointer type [enabled by default]
8_constpoint.c:11:2: error: assignment of read-only variable ‘p1’
zxf@zxf-virtual-machine:test$ cat 8_constpoint.c
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int i=10,j=11;
	int *const p1 = &i;
	int const *p2 = &i;//const int *p;
	int *const* p3 = &i;

	p1 = &j;
	printf("*p1 %d\n",*p1);
	return 0;
}
zxf@zxf-virtual-machine:test$ 

解释:
这里是一个错误的代码,在这里用了给int *const p1;的p1指针赋值了这个是地址不可变的所以这里报了错;
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int i=10,j=11;
	int *const p1 = &i;
	int const *p2 = &i;//const int *p;
	int *const* p3 = &i;

	*p1 = j;
	printf("*p1 %d\n",*p1);
	return 0;
}
zxf@zxf-virtual-machine:test$ ./8_constpoint 
*p1 11
zxf@zxf-virtual-machine:test$ 

其它两种情况也是一样的,大家可以自己写程序验证一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值