这样为什么不能使p1,p2的指向发生变化?

发布网友 发布时间:2024-12-12 17:54

我来回答

3个回答

热心网友 时间:2024-12-14 02:58

swap里你交换的是形参p1\p2的地址,但是参数值不是引用,所以不传出,影响不到main里的p1和p2。

void swap(int *&p1,int *&p2)

热心网友 时间:2024-12-14 02:58

你的程序传递的是p1、p2变量的值,当然不会满足你的要求了。
如果你传递的是p1、p2变量的地址,就可以满足你的要求。
程序如下:
#include<stdio.h>
void swap(int **p1,int **p2)
{
int *t;
t=*p1;*p1=*p2;*p2=t;
}
void main()
{
int a,b,*p1,*p2;
scanf("%d,%d",&a,&b);
p1=&a,p2=&b;
swap(&p1,&p2);
printf("%d,%d",*p1,*p2);
}

记住:要从函数中通过变量带回计算结果,必须传递变量的地址!!追问但是p1,p2变量的值也是地址啊,这怎么理解?

追答好吧,看看这个场景:
int a=10,b=20,*p1,*p2,*p11,*p21;
int *t;

p1=&a;p2=&b;

p11=p1;p21=p2;//相当于你原来程序中函数调用传递的地址

t=p11;//模拟swap语句
p11=p21;p21=t;

到此,原来p1和p2的地址值没有发生变化吧,所以维持原值不变。

热心网友 时间:2024-12-14 02:59

三等功第三个色条纹特务

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
1.6929s