// [2][3][4]
 char (*p)[3][4]  = (char (*)[3][4])malloc(2 * 3 * 4);
 memset(p, 'a', 2 * 3 * 4);
 p[1][2][0] = 'b';
 p[1][2][1] = 'b';
 p[1][2][2] = 'b';
 p[1][2][3] = 'b';
 for(int i = 0; i < 2; ++i)
 {
  for(int j = 0; j < 3; ++j)
  {
   for(int x = 0; x < 4; ++x)
    printf("%c", p[i][j][x]);
  }
 }

老忘记,记录一下。为什么指向char [2][3][4]数组的指针不是char (*)[2][3][4]呢?想想指向一维数组的指针为什么不是char (*)[4]你就知道了,因为当你使用类似p[x][][]时,第一个[]定位p的位置!