五笔在线输入:一个C语言问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/28 11:05:50
int a[3] [4]={
{1,3,5,7},
{9,11,13,15},
{17,19,21,23}
};
main()
{
int i,(*b)[4];
b=a+1;
for(i=1;i<=4;b=b[0]+2,i++)
printf("%d\t",*b[0]);
printf("\n");
for (i=0; i<2; i++)
{
b=a+i;
printf("%d\t",*(b[i]+1));
}
printf ("\n");
}

为什么输出是:
9 13 17 21
3 19

第2个循环的地方第一次是将a[0][0]的地址给了b,第二次应该是将该地址向后移了一次,变为a[1][0]了啊,那b[i]+1不就应该是a[1][1]的地址么,应该是11啊,为什么是19呢???
谢谢!~~~

第一次:(i=0)
b=a
b[0]是a[0][0]
b[i]+1就是a[0][1]

第二次:(i=1)
b=a+1
b[0]是a[1][0]
b[1]是a[2][0]
b[i]+1就是a[2][1]

printf("%d\t",*(b[i]+1));
改成 printf("%d\t",*(b[0]+1));
就对了。

用b[i]+1,则b[i]地址随i增加,再加1,地址又加了4