以下是引用UserYuH在2009-9-14 11:59的发言:
#include<stdio.h>
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=p; i<9; i++)
p[i]=i+1;
printf("%d \n",a[1][2]);
}
这题我也认为出错了,但在 ...
我不这么认为..因为一步一步推算后,确定这题目是错的.最少表达示是错的#include<stdio.h>
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=p; i<9; i++)
p[i]=i+1;
printf("%d \n",a[1][2]);
}
这题我也认为出错了,但在 ...
..下面一步一步来看:
(i=p; i<9; i++)
p[i]=i+1;
从这里可以看出,,只要P是一个负数不管是多少,i最终值为9--p[i]=i+1,只是把i+1的值赋予p[i]中..而不是i..所以i最终循环到的是8而再++就是9(先不管这个对与不对,因为和后面的没关系),看看后面算的是什么...a[1][2]..这是一个地址:(所以我感觉前面的一切都是一个晃子..迷惑人用的)看看图:
00 01 02
10 11 12
20 21 22
也就是说最后printf出来的是一个地址a[1][2]的值..不可能是6..只能是一个地址值..我机器上是1245020换成16进制是:12FF5C..也许别的机器不同但绝不可能一定是一个6..
如果求的是地址数是6才对..但这题目显然不是
[ 本帖最后由 snr108 于 2009-9-16 02:05 编辑 ]