char**指针与const

1,char**

char c = '0';

char* p1 = &c; //p1是一个指针变量, 存放的是char类型变量的地址
*p1 = '1';
const char* p2 = &c; //p1是一个指针变量, 存放的是char类型变量的地址, const修饰*, 表示指针内容(*p2)不可变

char** p3; //p3是一个指针变量, 存放的是char*类型变量的地址
p3 = &p1;
//p3 = &p2; //编译错误, p2是const char*类型的变量, 不能存它的地址

 

2,const char**

也可以写成char const**,修饰变量类型后的第1个标识符(即:第1个*)

char c = '0';

char* p1 = &c; //p1是一个指针变量, 存放的是char类型变量的地址
printf("c_addr:%p, p1:%p\n", &c, p1);
*p1 = '1';
const char* p2 = &c; //p1是一个指针变量, 存放的是char类型变量的地址, const修饰*, 表示指针内容(*p2)不可变

const char** p3; // (const char*)* p3, p3是一个指针变量, 存放的是const char*变量的地址, 不能存char的地址, 也不能存int的地址
//p3 = &p1; //编译错误: p1是char*类型的变量, 不能存它的地址
p3 = &p2;
*p3 = 0; //修改p2的变量值
printf("p2:%p, p3:%p\n", p2, p3);

 

3,char*const*

char c = '0';

char* p1 = &c; //p1是一个指针变量, 存放的是char类型变量的地址
*p1 = '1';
const char* p2 = &c; //p1是一个指针变量, 存放的是char类型变量的地址, const修饰*, 表示指针内容(*p2)不可变

char*const* p3; //p3是一个指针变量, 存放的是char*类型的变量, const修饰第2个*, 表示指针内容(*p3)不可变
p3 = &p1; 
//p3 = &p2; //编译错误, p2是const char*类型的变量, 不能存它的地址
//*p3 = 0; //编译错误, 指针内容不可变

 

4,const char*const*

也可以写成char const*const*

char c = '0';

char* p1 = &c; //p1是一个指针变量, 存放的是char类型变量的地址
*p1 = '1';
const char* p2 = p1; //p1是一个指针变量, 存放的是char类型变量的地址, const修饰*, 表示指针内容(*p2)不可变

const char*const* p3; //p3是一个指针变量, 存放的是const char*类型变量的地址, const修饰第2个*, 表示指针内容(*p3)不可变
p3 = &p1; //p1是char*类型的变量, 没编译错误??? 第2个那边就不行
p3 = &p2;
//*p3 = 0; //编译错误, 指针的内容不可变

 

posted @ 2025-02-16 00:11  yanghui01  阅读(15)  评论(0)    收藏  举报