C语言指针问题?

有大佬帮忙解释下为啥输出这些吗,我地址交换和值交换分不太好

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-08-30
被调函数修改主调函数内变量的值只能通过传递地址,因为被调函数在压栈的时候会创建自己的变量和主调函数内需要修改的变量不是一个存储单元,所以不能修改主调函数内变量的值。
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

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网