求高手帮忙解释一下这个程序的功能。。最好是重要的语句注释一下,大谢!

#include<stdio.h>
void exch(int *t)
{t[0]=t[5];
}
main()
{int x[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
while(i<=4)
{
exch(&x[i]);i++;//这里传送第i个元素的地址值是什么意思啊,有点不懂.
}
for(i=0;i<5;i++)
printf("%d,",x[i]);
printf("\n");
}
它传送第i个元素的地址值与传送数组名有什么不同吗.

简单给你说下传址跟传值得区别吧
变量是存储在内存中的,系统在内存中开辟一块区域,存放值,然后这个区域有个地址
通过这个地址可以找到这个值

传址是传递这个变量的地址,对这个变量的操作通过地址 改变的是原来的那个址
传值是把这个变量的值传过去 ,传完后这个值得修改就不关这个变量的事了
不是同一个地址的值追问

谢谢了。我还有个问题就是如果我把这语句exch(&x[i]);改为这语句exch(x);那他们运行结果的值有什么区别啊。。我就是搞不懂。。

追答

&x[i]是表示x数组中第i个值得地址
x的话就相当于传这个数组的首地址

前者执行完后的输出结果是
6
7
8
9
10
后者的输出结果是(应该是 )
6
6
6
6
6

追问

谢谢你 可是后者的答案是6,2,3,4,5.不知道为什么

追答

没错 就是6,2,3,4,5. 每一次都只是改变第一个 后面几个不会改变

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-23
被调用函数的形参是指针类型int *t,所以在调用的过程中的实参要是参数的地址,传递数组名就直接是数组的值,跟地址是不一样的!!!!
第2个回答  2013-07-22
数组名是数组首元素的地址,&x[i] 就是x+i。
相似回答