C语言 子函数改变指针指向的值
C语言 子函数改变指针指向的值
首先,为了防止出错,我还在在《C primer plus》中再看了一次概念。
如下:
指针是个左值,就跟我们定义一个 int a = 10;一样。
接着再查找间接运算符*的说明。
如下:
首先我们写个对的。
#include <stdio.h>int b = 30;void trans(int** n)
{//int b = 30;//不能在里面进行定义堆栈会回收释放*n = (int*)&b;printf("b add =%p\n", &b);printf("*n add =%p\n", *n);printf("**n =%d\n", **n);
}int main()
{int a=10;int* p = (int*)&a;//指针创造的也只是个左值,指向地址。printf("p add =%p\n", p);trans(&p);printf("a add =%p\n",&a);printf("p add =%p\n",p);printf("*p =%d\n",*p);return 0;
}
这里可以通过子函数改变指针指向的地址。
结果图:
换个失败的子函数,也是容易犯的错误
void trans(int* n)
{n = (int *)&b;//*n = 33;printf("b add =%p\n", &b);printf("*n add =%p\n", n);printf("*n =%d\n",*n);}
结果图:
可以看到指向并没有改变。
这里我想讲讲我的理解:
子函数涉及堆栈区操作,在子函数要有一个压栈创建临时变量的工作,如果只是一个临时变量的话,则用完之后就会释放,而如果是地址传递则是直接对全局变量区进行操作,所以值能改变,自然就变成了指向的改变。
当然肯定有小伙伴说我为什么要用子函数来进行指针指向的改变,这样只会增加我的大脑负担啊。
没错,的确是这样的!!!
这种容易引起误会的操作在大量的代码工作中只会让我们疲于应对。
本人只是闲暇之余的探讨。如果一定要用到子函数来改变指针的指向的话最好子函数返回赋值给指针。
如:
int *p = get_new_arg(参数,参数);
C语言 子函数改变指针指向的值相关推荐
- C语言 | 改变指针变量的值
例35:C语言编程实现改变指针变量的值. 解题思路: 指针p的值是可以变化的,printf函数输出字符串时,从指针变量p当时所指向的元素开始,逐个输出各个字符,直到遇'\0'为止.而数组名虽然代表地址 ...
- C语言关于传入子函数的指针形参的地址改变
这个问题是在学习链表时遇到的,在做实验二的过程中想要实现插入(或删除)操作时,我们会调用子函数传入首元结点地址作为指针形参,通过一系列变化(一般是循环)找到待处理结点后进行相应处理. 我们总能轻易地改 ...
- 【C 语言】指针数据类型 ( 不允许向 NULL 地址写入数据 | 不允许不断地改变指针指向 | 字面量存放位置 )
文章目录 一.不允许向 NULL 地址写入数据 二.不允许不断地改变指针指向 三.字面量存放位置 一.不允许向 NULL 地址写入数据 声明指针变量 , 并为其 设置 NULL 初始值 , NULL ...
- C语言中函数和指针的參数传递
C语言中函数和指针的參数传递 近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家 ...
- c语言子函数返回字符串的正确方式
c语言子函数返回字符串的错误 最近做leetcode上的一道题,通过子函数返回字符串.开始时用局部变量的字符串返回的,认为返回了字符串的首地址,便可以get到这个字符串,但由于局部变量离开函数后被回收 ...
- C语言中函数参数传递的方式:值传递,地址传递
** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...
- C语言子函数通过传递参数地址改变参数数值2021-05-28
由于总是忘记这最基础的"通过传递参数地址,从而改变参数数值."的形式,还是在此记录一下吧. 子函数声明: 参数传递形式:*NAME void color_intensity_SCO ...
- 子函数的指针释放问题
C语言中遇到一个这样的问题:子函数中malloc了一个指针存储数据,作为该子函数的返回值,return到主函数. 那么这个指针应该在哪里释放呢? 显然不能在子函数里释放,否则返回值没有意义.这样就应该 ...
- C语言中函数和指针的参数传递
最近写二叉树的数据结构实验,想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个例子讨论一下c语言中指针作为形参的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ...
最新文章
- 跟我学Springboot开发后端管理系统9:AOP+logback+MDC日志输出
- CVPR2021评审出来了!你的论文怎么样
- AcWing 1068. 环形石子合并
- python拓展库random_一分钟让你学会Python Random库的使用
- HTML样式- CSS
- 计算机网络之了解计算机网络
- 京东联盟/好京客API与京东默认PID申请教程
- gwas snp 和_GWAS | 原理和流程 | 全基因组关联分析
- 奥城大学计算机专业,双录取的美国研究生大学有哪些?哪些专业被允许?
- 判断闰年java_java中判断是否闰年
- linux系统 用优盘启动流程,制作u盘启动linux系统
- The server encountered an internal error () that prevented it from fulfilling this request
- WeTest全球化服务,为使命召唤手游质量保驾护航
- Android 7.1.1中SystemProperties详解
- hibernate创建配置遇到问题:!-- https://mvnrepository.com/artifact/javassist/javassist -- dependency
- 微商大咖龚文祥遭查税:退出微商,微信收款有补税风险?
- 锂电池供电电路设计方案汇总(四款设计方案)
- 通过Excel制作下拉框筛选出成绩
- 淘宝app商品详情API接口(商品详情描述信息查询接口)
- KOL垂直化,品牌营销策略如何变更?