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; //编译错误, 指针的内容不可变
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
2023-02-16 UI置灰
2023-02-16 简单边缘光