#include"stdio.h"
void main()
{int i,a
[color=white][5[/color]];
for(i=0;i<5;)
{
a[i]=++i;
printf("a[%d]%d\n",i,a[i]);
}
getch();}
这个代码的结果是从a[1]开始输出的,为什么不是从a[0]开始呢~////////////////////
我的看法;
a[i]=++i;此句中(++i)意为先对 i 自加后,再取 i 的值,然后再执行赋值(其中也包括了对数组下标 i 的赋值)。因此,第一次循环时,a[ 1 ]=1,并没有对a[ 0] 赋值;printf("a[%d]%d\n",i,a[i]); 到了此句,此时i ==1,输出a[i]则输出的是a[1]。
////////////////////////////////////////另外如果变成:
#include"stdio.h"
void main()
{int i,a[
5];
for(i=0;i<5;)
{
a[i]=i++;
printf("a[%d]%d\n",i,a[i]);
}
getch();}
后面就输出的是很大的数字~不知道是为什么~应该是随机数字吧~///////////////////////////
对此我的看法:
a[i]=i++; 此句中i++意为先取i 的值,并对a[ i] 赋值后,i 再自加。第一次循环,取i=0,a[i]为a[0]=0,然后i 自加,执行到下一句: printf("a[%d]%d\n",i,a[i]); 此时,i 值为1,故要输出a[i],则是要输出的是a[1]的值,而此时上一句仅对a[0] 赋了值,并没有对a[1]赋值。因此,输出的全部为地址。
还有在调试过程中,我发觉一个好奇怪的现象,就是a[5]的值随i 的改变而改变,并始终等于i 的值。严格来说,定义数组int a[5];应只有a[0],a[1],a[2],a[3],a[4].并不能取到a[5].故对此我也不明白。
[[italic] 本帖最后由 now 于 2007-11-25 20:39 编辑 [/italic]]