C语言指针问题?

有大佬帮忙解释下为啥输出这些吗,我地址交换和值交换分不太好... 有大佬帮忙解释下为啥输出这些吗,我地址交换和值交换分不太好 展开
 我来答
听不清啊
高粉答主

2020-08-30 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

调用结束后,所有实际参数的值均不会发生变化。但是swap3中*pa,*pb发生的交换(实际就是主函数中a和b的值发生了交换)

百好佳
2020-08-30 · TA获得超过301个赞
知道小有建树答主
回答量:702
采纳率:75%
帮助的人:184万
展开全部
被调函数修改主调函数内变量的值只能通过传递地址,因为被调函数在压栈的时候会创建自己的变量和主调函数内需要修改的变量不是一个存储单元,所以不能修改主调函数内变量的值。
1、被调函数swap1形参为(*ptr1,*ptr2),此时两个形参不是地址是变量a和b的值,被调函数swap1压栈的时候会从新创建三个变量 x、y、w,所以a和b的值没有被修改。
2、被调函数swap2形参为(prt1,prt2),此时两个形参是变量a和b的地址,被调函数内:
int *p;
p = p1; p1 = p2; p2 = p;
此时p1内存放的是变量a的内存单元首地址,p2内存放的是变量b的内存单元首地址,
互相交换的地址值。并没有修改主调函数中变量a和b的值。

3、被调函数swap3形参为(prt1,prt2),此时两个形参是变量a和b的地址,被调函数内:
int p;

p = *pa; *pa = *pb; *pb = p;

*pa = 主调函数内变量a的值 = 5,*pb = 主调函数内变量b的值 = 7;此时修改*pa或者*pb的值就是再修改主调函数内变量a和b的值;
追问
第三个还是不太明白
追答
具体哪里不清楚? 你只要记住 指针变量 prt1 内存放的是变量a的内存单元首地址,此时 prt1 就指向了变量a的内存单元首地址,*pet1 就等于变量a ,他俩的值都是5
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式