高手帮忙分析一下两个程序
第一个程序,书上的例题#include<stdio.h>
main()
{
int bx[10]={1,2,3,4},i;
char name[4][9]={{"张三"},{"李四"},{"王五"},{"赵六"}};
char (*p)[9];
p=name;
for(i=0;i<4;i++)
printf("bx=%d,name=%s\n",bx[i],(p+i));
}
输出结果是:
bx=0,name=张三
bx=1,name=李四
bx=2,name=王五
bx=3,name=赵六
红色(p+i)这个式子应该是表示“某行一维数组的地址”,为什么放在这里居然可以打印出“所指向数组的内容”?
再对比一下我自己写的另外一个程序:
#include<stdio.h>
main()
{
int a[5][5],i,j,k=0;
int (*p)[5];
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=k++;
}
}
p=a;
for(i=0;i<5;i++)
{
printf("%d",(p+i));
putchar(10);
}
}
同样是红色部分,但打印结果是:
1244956
1244976
1244996
1245016
1245036
这应该是5行一维数组的地址。我用在VC下单步执行,看到数组a[5][5]中正确分配了0~25个数。
请高手帮小弟分析一下,鸣谢。
[ 本帖最后由 lichence 于 2009-10-12 21:08 编辑 ]