#include<tdio.h>
void fun(int *a)
{
a[0]=a[1];
}
main()
{
int a[10]={10,9,8,7,6,5,4,3,2,1},i;
for(i=2;i>=0;i++) fun(&a[i]);
for(i=0;i<=9;i++) printf(“%d”,a[i]);
printf(“\n”);
}
答案是(7777654321)
为什么是这个答案啊???
>> 本文固定链接: http://www.vcgood.com/archives/3140
仔细分析一下
void fun(int *a)
{
a[0]=a[1];
}
就是那个地方不懂啊。
哪一位知道请讲一下,谢谢了!!!!
这个程序是错的,根本没有执行结果,注意这句:
for(i=2;i>=0;i++) fun(&a[i]);
循环条件 i>=0 ,因为后面是 i++ ,所以循环条件永远为真。
把上面的 i++ 改为 i– 就出现了你说的结果,仔细分析一下啊。
当 i = 2 时,传入 fun 的是 a[2] 的地址,这个时候 fun 中的数组地址 a 是传入的 a[2] 的地址,其实这个时候 a[0]的实际地址等于 a[2] 的地址,a[1] 的实际地址等于 a[2] 的地址加一,即原数组 a 中 a[3] 的地址。语句 a[0]=a[1] 的执行结果就是 a[2]=a[3]。
后面以此类推,就是 i=1,0 时,执行的语句实际是 a[1]=a[2] , a[0]=a[1]。
有点类似汇编中的段地址和段偏移地址。
呵呵……
哦,我写错了,
懂了,谢谢了!!!