简单C程序,帮帮小弟

[复制链接]
查看11 | 回复4 | 2008-10-22 17:21:20 | 显示全部楼层 |阅读模式
C程序如下:
#include
swap(int* x,int *y);
main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d",a,b);
}
swap(int *x,int *y)
{
int *z;
*z=*x; *x=*y; *y=*z;
}
这个程序能正确运行,我想问下,为什么把程序中所有的*号去掉后,程序就不能运行了?&a,&b不是个地址吗?为什么不能传给int a,int b ,进行执行???

回复

使用道具 举报

千问 | 2008-10-22 17:21:20 | 显示全部楼层
swap(int *x,int *y) { int *z; *z=*x; *x=*y; *y=*z; } 先说这个:*去掉以后,传进来的就是一个值,而且因为这些变量是内部变量,函数结束后也没有效了。所以就这个函数而言,*去掉以后,编译不会有错,但是的不得你想要得结果。在本例中,由于你传的是个地址,但你定义形参的却是普通的变量,不是指针,所以会报错。...
回复

使用道具 举报

千问 | 2008-10-22 17:21:20 | 显示全部楼层
去掉*号以后就不能改变a 和b的值了。因为去掉以后是值传递。也就是只传递a和b的值给函数,函数并不知道存放a和b的地址是多少。不知道地址就没法修改数据,所以没办法对a和b的值进行交换。...
回复

使用道具 举报

千问 | 2008-10-22 17:21:20 | 显示全部楼层
int *x,x是一个指针变量,指针是用来存储地址的所以能接收&a。建议好好看看指针部分...
回复

使用道具 举报

千问 | 2008-10-22 17:21:20 | 显示全部楼层
去掉星号是值传递,改变不了原来的变量的数值...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行