main(){
typedef char CA3[2][2][2];
typedef CA3 *PCA3;
typedef char CA2[2][2];
typedef CA2* PCA2[2];
CA3 ca3={'A', '\0', 'B', '\0', 'C', '\0', 'D', '\0'};
PCA3 pca3 = &ca3;
PCA2 pca2={ca3, ca3+1};
int i=0,j=0;
for(i=0; i<2; i++)
{
printf("\n");
printf("%s\n", (char*)pca3[0][i]);
printf("%s\n", (*(pca2+i))[0][1]);
for(j=0; j<2; j++)
{
putchar(*(*(ca3+i)+j)[0]);
putchar(' ');
}
}
}我测试的结果是:A
B
A B
C
D
C D Press any key to continue请问为什么是这样的结果?前面4行有typedef的,我看不懂,请教请教,谢谢先!
typedef char CA3[2][2][2];
typedef CA3 *PCA3;
typedef char CA2[2][2];
typedef CA2* PCA2[2];
CA3 ca3={'A', '\0', 'B', '\0', 'C', '\0', 'D', '\0'};
PCA3 pca3 = &ca3;
PCA2 pca2={ca3, ca3+1};
int i=0,j=0;
for(i=0; i<2; i++)
{
printf("\n");
printf("%s\n", (char*)pca3[0][i]);
printf("%s\n", (*(pca2+i))[0][1]);
for(j=0; j<2; j++)
{
putchar(*(*(ca3+i)+j)[0]);
putchar(' ');
}
}
}我测试的结果是:A
B
A B
C
D
C D Press any key to continue请问为什么是这样的结果?前面4行有typedef的,我看不懂,请教请教,谢谢先!
下面是一个三维数组变量的声明:
char ca3[2][2][2];
//CA3是我们建立的一个类型别名
typedef char CA3[2][2][2];
//用新定义的类型别名来声明对象并赋初值,等价于char ca3[2][2][2]='A', '\0', 'B', '\0', 'C', '\0', 'D', '\0'};
CA3 ca3={'A', '\0', 'B', '\0', 'C', '\0', 'D', '\0'};
其它三行可以照此分析。
例如:typedef char D
typedef D BB[2]={'1','\0'};//这里声明的B数组类型为 char如果除了这个其它的也不理解,那就先搞明白多维数组和数组指针的问题。
typedef char CA3[2][2][2];//定义CA3类型(3维char数组) 用该类型声明的变量都是3维char数组
typedef CA3 *PCA3; //定义PCA3类型 (指向CA3的指针) 用该类型声明的变量都是指向CA3的指针
typedef char CA2[2][2]; //定义CA3类型(2维char数组) 用该类型声明的变量都是2维char数组
typedef CA2* PCA2[2]; //定义PCA2类型(1维指针数组 数组元素都是指向CA2的指针)
//用该类型声明的变量都是1维指针数组---有用请给分