C语言一个地址传递的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:58:31
main()
{int a=10,b=20;
int *x=&a,*y=&b;
printf("a=%d,b=%d\n",a,b);
swap(x,y);
printf("a=%d,b=%d\n",a,b);
}
swap(int *x,int *y)
{int *t;
*t=*x;
*x=*y;
*y=*t:}

输入结果
a=10,b=20
a=20,b=20

有人能告诉为什么b的值没有被替换

以及Tuibo C编译系统对于这个程序的关键部分到底是怎样处理的?

对于你这个程序 我的编法是:
#include <stdio.h>
#include <stdlib.h>

main()
{
int *x,*y,*z,a,b;
a=10;
b=20;
x=&a;
y=&b;
printf("a=%d,b=%d\n",a,b);
z=x;
x=y;
y=z;
printf("a=%d,b=%d\n",*x,*y);
}
我调过了 这个就没有问题.
至于你的程序为什么不能交换a,b的值 我觉得你的句子中有几处错误:

第一个:
main()中
int *x=&a,*y=&b;
这一句&a和&b是地址,你把它们赋给了"指针*x和*y所指的变量",而这些变量是没有定义的,这是个错误 你应该把地址赋给*x和*y这2个指针所对应的"指针变量" 我所说的"指针变量"和"*x,*y所指向的变量"是2个概念 应该写成x=&a;y=&b 才是正确的

第二个:
swap中
*t=*x的意思是"把*x所指向的变量赋给*t所指向的变量",而*t没有指向任何一个变量 它在内存中没有地址 如何接受赋过来的值呢?这是一个错误
应该写成
int t;
t=*x;
*x=*y;
*y=t;
这样 t是一个整型变量,而不是一个无地址的指针,在内存中就有了地址,能够接受赋值.
总的来说 按你的写法应该是:
#include <stdio.h>
#include <stdlib.h>

swap(int *x,int *y)
{
int t;
t=*x;
*x=*y;
*y=t;
}