C语言二级指针用途
首先,C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。
学习C语言的一定知道:
- C语言中参数传入函数的过程为值传递,函数中修改的局部变量的值对原来的实参并没有影响。
- 当使用一级指针作为参数传入函数的过程为地址传递, 函数的实际操作是对指针的操作,那就可以通过函数中对于实参指针的修改达到修改实参的值的目的。
即:我们通过传递指针来达到修改一个值的目的。那么当我们需要修改一个指针的时候呢,这个时候我们就需要指针的指针(二级指针):
void GetMemory(char **p,int num)
{
*p=(char*)malloc(sizeof(char)*num); //此时*p就变成了是形参本身的地址
}
void main()
{
char *str=NULL;
GetMemory(&str,100); //&str是实参的地址,所以实参和形参之间就可以直接调用
strcpy(str,"hello");
free(str);
}
上述代码的易错写法是什么样呢:
void GetMemory(char *p,int num)
{
p=(char*)malloc(sizeof(char)*num); //p是形参指向的地址
}
void main()
{
char *str=NULL;
GetMemory(str,100); //str是实参指向的地址,不能通过调用函数来申请内存
strcpy(str,"hello");
}
我们再强调下结论:
- 指向指针的指针的作用 :当要修改实参指针的指向的时候,形参必须使用指向指针的指针。
- 当修改的是实参指针指向的内容时,则形参只需是指针即可
关于值传递:
指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
参考文献:
标签:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具