char * const p char const * p const char *p 三个有什么区别?

[定义理解]

char* const p; p为指向字符变量的指针,地址不变,地址内容可变

const char *p; p为指向字符变量的指针,地址可变,地址内容不变

char const *p 与const char *p等价。

[记忆方法]

const * p (不管char的位置,中文翻译就是常量的指针, 从左往右读,地址可变,地址内容不变)
* const p (一样从左往右读,指针常量,地址不变,地址内容可变)

const char * const p (指针不能变,指的量也不能变)

[正确示例]

#include "stdio.h"
int main(int argc, char const *argv[])
{
	
	char str[]="abcd";
	char const *p;
	p=str;
	p++;
	char* const q=&str[1];
	*q='m';
	printf("%c,%c\n",*(p+1),*q );
	return 0;
}

[运行结果]

jietang@ubuntu:~/src/demo13$ cc test.c -o test
jietang@ubuntu:~/src/demo13$ ./test 
c,m

常量指针p的地址可变(p++),若改变p指向地址内容的值会出现如下错误:

char const *p;
p=str;
*p='n';
jietang@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:8:2: 错误: 向只读位置‘*p’赋值

指针常量q的内容可变(*q='m'),若改变q的指向地址会出现如下错误:

char* const q=&str[1];
q++;
jietang@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:11:2: 错误: 令只读变量‘q’自增

【注意】对于指针常量char* const q,在定义时必须初始化。否则会出现如下错误:

char* const q;
q=&str[1];
jietang@ubuntu:~/src/demo13$ cc test.c -o test
test.c: 在函数‘main’中:
test.c:10:2: 错误: 向只读变量‘q’赋值





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值