有大佬帮忙解释下为啥输出这些吗,我地址交换和值交换分不太好
温馨提示:答案为网友推荐,仅供参考
第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的值;追问
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
本回答被提问者采纳