昨天在网上看到这样一个问题:
char **p, a[16][8];
问:p=a是否会导致程序在以后出现问题?为什么?
答案:这个会导致出现问题:
不能将'char [16][8]'转化成‘char**’
也就是说a可以认为是char(*)[8]类型,a是指向数组的指针
可以改成这样 char (*p1)[8]=a,
但是要注意p的使用,如a[1][2] 等价的为 *(*(p+1)+2)而不是*(p+11)。
我是这样理解的:
对于一个多维数组:char a[m][n];可以认为它是 MYTYPE a[m];这里的
MYTYPE是char b[n];即:数组a由m 个含n元素的一维数组组成。我们理解a是一个数组变量,a中保存的是它的首元素的地址,而它的首元素是MYTYPE类型的a[0]也是一个数组,这样就是说,a中保存的地址所保存的内容是b(b是一个数组),那么a+1时跳过的就是一个数组(跳过a所存的地址所表示的变量的长度);而b中保存的是b的首元素地址,所以b+1时跳过的是b的一个元素。
注:
还有两个问题,比较容易理解:
(1)
char a[2][2][3]={{{1,6,3},{5,4,15}},{{3,5,33},{23,12,7}} };
for(int i=0;i<12;i++)
printf("%d ",_______);
在空格处填上合适的语句,顺序打印出a中的数字
答案:a[i/6][(i/3)%2][i%3]
MyStruct k;