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; //p3是一个指针变量, 存放的是const char*类型变量的地址
//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 @   yanghui01  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
历史上的今天:
2023-02-16 UI置灰
2023-02-16 简单边缘光
点击右上角即可分享
微信分享提示