2个回答
展开全部
被调函数修改主调函数内变量的值只能通过传递地址,因为被调函数在压栈的时候会创建自己的变量和主调函数内需要修改的变量不是一个存储单元,所以不能修改主调函数内变量的值。
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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询