【char&const* char】char **const p const char **p char *const *p

C语言里

const char **p
char *const *p
char **const p

看变量声明的时候应该从右至左看,以
char *const *p
为例:
先看从右至左第一个符号*,这表明变量p是指针,再看第2个符号const,它修饰的是*p,*p表示p指向的内容,所以,p指向的内容是常量,下一个符号是*,这就表示该常量为指针,然后是char,就表示指向的内容是char

 

char *const p;与 const char * p;的区别

 

前者定义P为常量,即只能单向赋值一次,P++展开为p=p+1,重复赋值给常量,出错,后者P为地址变量,地址变量是指向该变量的存储地址值如:4B3F6A,不能赋给一个字符值(字符相当于ascii表中对应的整数)如强制赋值,会把原地址变量P变为一个两位数的整数,造成地址指针溢出。而p++,则表示把该地址变量向下一个存储单元移动一位,如4B3F6A到4B3F6B.所以合法。

 

红字部分是否会造出程序跑飞一种可能?

 

const char * p 和 char const * p 是一个意思,都是p所指向的变量的值不能改变,例如:
const char ch = 'a';
const char* p = &ch;
*p = 'b';   //这样是错的

char* const p,意思是p所指向的地址是不能改变的,例如:
char* const p = &ch1;
p = &ch2;  //这样是错的 

posted on 2022-10-04 01:31  bdy  阅读(21)  评论(0编辑  收藏  举报

导航