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;}
}
展开
 我来答
PAM_Blogggggg
2019-01-21
知道答主
回答量:26
采纳率:50%
帮助的人:9.1万
展开全部
#include <stdio.h>
void swap(int *a,int *b);

int main()
{
    int a,b,*x,*y;
    scanf("%d %d",&a,&b);
    x=&a,y=&b; //x和y分别保存a和b的地址
    printf("x和y的原始地址:x = %d, y = %d\n",x,y);
    swap(x,y);
    printf("经过swap函数后x和y的地址:x = %d, y = %d\n",x,y);
    //可以发现x和y的地址并没有改变
    printf("%d %d\n",*x,*y);
}
void swap(int *x,int *y)
{
    printf("函数开头x和y的地址:x = %d, y = %d\n",x,y);
    int *t;
    t=x; x=y; y=t;
    printf("函数结尾x和y的地址:x = %d, y = %d\n",x,y);
    //可以看到,x和y的地址确实是互换了,但是,这又有什么用呢?
    //它在这里改变的仅仅是函数的形式参数而已。形式参数的值并不具备全局性。
}

对代码做了一点修改。只要运行一下看看效果,再看看注释,应该就能有一些自己的理解了。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2019-01-19 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
#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;}        //改了
}

这样就可以实现了。

因为仅改变a,b的值是不能够影响到主函数的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CJJohn
2019-01-16 · Persistence is harder than eff...
CJJohn
采纳数:475 获赞数:1362

向TA提问 私信TA
展开全部
改成*t=*a;*a=*b;*b=*t;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-01-10
展开全部
你需要理解c语言中的“值传递”
#include<stdio.h>
main(){
void swap(int *a, int *b);
int a,b,*x,*y;
scanf("%d %d",&a,&b);
printf("\n");
x=&a;
y=&b;
swap(x,y);
printf("%d %d\n",*x,*y);
}

void swap(int *a,int *b){
int t;
t=*a;
*a=*b;
*b=t;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式