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;  
}  

[运行结果]

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

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

char const *p;  
p=str;  
*p='n'; 

 lifeihu@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++;  



lifeihu@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];  



lifeihu@ubuntu:~/src/demo13$ cc test.c -o test  
test.c: 在函数‘main’中:  
test.c:10:2: 错误: 向只读变量‘q’赋值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (1)可以定义 const 常量 (2)const 可以修饰函数的参数、返回值. 详细内容: 1、什么是const...
    幽鬼09阅读 744评论 0 4
  • 题目类型 a.C++与C差异(1-18) 1.C和C++中struct有什么区别? C没有Protection行为...
    阿面a阅读 7,898评论 0 10
  • 一、概述 用const限定来限定值不能被改变的变量。一个变量被const限定后,值不能被改变,只能在con...
    王一百阅读 680评论 2 3
  • 丙申初冬丁亥日与诸友共进午餐有感 文/容者乃成 连绵秋雨今转晴,诸友相邀赴朋朋。 肉香扑鼻招佳客,推盏问杯分分钟。...
    萧萧晚风阅读 231评论 0 2
  • toolBar很常用,所以做了个工具类扩展性很好 基本介绍: 一、写了两个创建方法 二、其实你直接这样创建就会出来...
    LiYaoPeng阅读 660评论 2 5

友情链接更多精彩内容