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的,我看不懂,请教请教,谢谢先!

解决方案 »

  1.   

    typedef就是定义别名,如 typedef A B  表示 B和A是等价的
      

  2.   

    对复杂变量建立一个类型别名的方法很简单,你只要在传统的变量声明表达式里用类型名替代变量名,然后把关键字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'};
    其它三行可以照此分析。
      

  3.   

    typedef 就是定义数据类型的“同义词”,而且可以嵌套,
    例如:typedef  char  D
    typedef  D    BB[2]={'1','\0'};//这里声明的B数组类型为 char如果除了这个其它的也不理解,那就先搞明白多维数组和数组指针的问题。
      

  4.   

    括号里是 新定义类型的解释
    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维指针数组---有用请给分
      

  5.   

    http://www.kuqin.com/language/20090322/41866.html