函参中的双重指针
在学习swap函数时,若想改变实参,可以将函参设置为指针类型。
那么函参中的双重指针,也是这种含义。想改变实参(指针类型)的指向或值时,可以用双重指针。
void change(char* p) { p = "bbb"; } int main() { char *v = "aaa"; change(v); printf("%s",v); return 0; }
输出的结果仍然是aaa。函数在传值时会先拷贝一份再传过去,想一想swap函数就理解了。即p和v是两个单独的指针,p指向别的内存,和v无关,v依然指向aaa。
void change(char** p) { *p = "bbb"; } int main() { char *v = "aaa"; change(&v); printf("%s",v); return 0; }
双重指针,既可以改变指向、也可以改变值。即p就是v。上述代码本质是改变了v的指向,由常量区的aaa,指向了常量区的bbb
关于常量区
int main() { char *v = "aaa"; //指向常量区(该区只读不可写) v[0] = 'b'; //报写入权限冲突 char w[] = "aaa"; //w是已经开辟的局部变量内存,栈内存 w[0] = 'b'; //正确 return 0; }
参考
【编译汇编链接】全局变量 char* g_str 和 char g_str[]_char * 全局变量-CSDN博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-07-05 Qt 异常总结(ubuntu环境)
2020-07-05 linux简单分区
2020-07-05 U盘启动盘制作工具
2020-07-05 Ubuntu常用命令