C语言用指针法交换两个数的顺序问题
交换两个数的顺序,可以交换地址,可以交换值。当用函数调用法交换地址的时候,为什么不可以实现。程序如下:#include<stdio.h>//这是用一个主函数就交换的方法。...
交换两个数的顺序,可以交换地址,可以交换值。当用函数调用法交换地址的时候,为什么不可以实现。程序如下:
#include<stdio.h>//这是用一个主函数就交换的方法。
main()
{
int a,b,*x,*y,*t;
scanf("%d %d",&a,&b);
x=&a;y=&b;
{t=x;x=y;y=t;}
printf("%d %d\n",*x,*y);
}
#include<stdio.h>//这是用函数调用的方法,为什么这个方法为什么就不能实现。
main()
{
int swap(int *a,int *b);
int a,b,*x,*y;
scanf("%d %d",&a,&b);
x=&a;y=&b;
swap(x,y);
printf("%d %d\n",*x,*y);
}
int swap(int *a,int *b)
{
int *t;
{t=a;a=b;b=t;}
} 展开
#include<stdio.h>//这是用一个主函数就交换的方法。
main()
{
int a,b,*x,*y,*t;
scanf("%d %d",&a,&b);
x=&a;y=&b;
{t=x;x=y;y=t;}
printf("%d %d\n",*x,*y);
}
#include<stdio.h>//这是用函数调用的方法,为什么这个方法为什么就不能实现。
main()
{
int swap(int *a,int *b);
int a,b,*x,*y;
scanf("%d %d",&a,&b);
x=&a;y=&b;
swap(x,y);
printf("%d %d\n",*x,*y);
}
int swap(int *a,int *b)
{
int *t;
{t=a;a=b;b=t;}
} 展开
19个回答
展开全部
int swap(int *a,int *b)//a与b分别复制主函数x与y的值,即a与x的指向相同,b与y的指向相同
{
int *t;
{t=a;a=b;b=t;}//通过交换,a和y的指向相同,b与x的指向相同,但是,x与y没有改变原来指向,这样函数swap结束,a与b消失,输出结果不变
}
换成
int t;
{t=*a;*a=*b;*b=t;}//将改变x和y指向的地址的值,达到交换目的
{
int *t;
{t=a;a=b;b=t;}//通过交换,a和y的指向相同,b与x的指向相同,但是,x与y没有改变原来指向,这样函数swap结束,a与b消失,输出结果不变
}
换成
int t;
{t=*a;*a=*b;*b=t;}//将改变x和y指向的地址的值,达到交换目的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//分析如下:
x=&a;y=&b; //指针x指向变量a,指针y指向变量b
swap(x,y); //调用swap函数,实参x赋值给形参a, 实参y赋值给形参b,进入swap函数体
//在swap函数体中
int swap(int *a,int *b)
{
int *t;
{t=a;a=b;b=t;}
}
//在swap函数体中,指针a指向main()函数的变量a, 指针b指向main()函数的变量b,
//特别注意,实参x此时仍然指向变量a,实参y仍然指向变量b。
//指针x,y和变量a,b存放在main()函数的栈区中,而指针a,b是在swap()函数的栈区中,
//执行{t=a;a=b;b=t;}后,指针a指向了main()的变量b了,指针b指向了main()函数的变量a了。
//这个指针交换语句,它只是改变了指针本身的值,也就是改变了指针的指向,而没有改变指针
//所指向的内存空间的内容。当swap()函数执行完后,swap的栈区空间也就释放了,那么栈区里
//的局部变量指针a,b,t的内存空间也就都不存在了。返回到main()函数继续执行,此时main()函数
//里的指针x,y仍然是x—>a,y—>b,所以执行printf("%d %d\n",*x,*y);语句,所以输出的仍然还是
//a,b的值,没有交换a,b的值。出现这种输出结果的原因就是形参值的改变(也就是swap()函数的指针变量a,b)
//并不会影响实参x,y的值。虽然你传进去的是指针变量,是地址值,但是你没有改变指针指向的变量
//的值,而只是改变了局部指针变量本身的值,这跟值传递就没什么区别了。因此,swap函数需要做如下修改:
void swap(int *a, int *b)
{
int t;
{t=*a; *a=*b; *b=t;} //这样做就改变了局部指针变量指向的变量的值,亦即交换两个变量的值
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
swap只是把指针地址给交换了,但是虚参是不能改变实参的,看起来是把地址交换了,但实际上等同于没换
所以,并没有改变指针地址里存的内容
#include<stdio.h>//这是用函数调用的方法,为什么这个方法为什么就不能实现。
void swap(int *a,int *b)
{
int t;
{t = *a;
*a = *b;
*b = t;}
}
void main()
{
int a,b,*x,*y;
scanf("%d %d",&a,&b);
x=&a;y=&b;
swap(x,y);
printf("%d %d\n", *x, *y);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询