|  | 
 
 发表于 2020-10-15 14:14:02
|
显示全部楼层
   本楼为最佳答案 
| 本帖最后由 风过无痕1989 于 2020-10-16 10:17 编辑 
 通常我们将二维数组看作是二个一维数组,那么对于三维数组,我们也就可以将之看成是三个二维数组。下面的程序正是根据此思想设计的,从数组的贮存和运行来看,对于三维数组,b + 1 指向的是第一个二维数组第一行的第一个元素,而不是第一个二维数组的第二个元素
 
 
 复制代码#include<stdio.h>
int main()
{
        int i,j,k = 0;
        int a[3][3] = {1,2,3,4,5,6,7,8,9};
        int b[3][3][3] = {10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37};
    
        printf("a      %p\n",*a);
        printf("a + 1: %p\n\n",*a + 1);
        
        printf("b      %p\n",*b);
        printf("b + 1: %p\n\n",*b + 1);
        printf("%p\n",*(*b + 1)); 
        printf("*b + 1 的值:%d\n",*(*(*b + 1)));  // 输出 b + 1 的值
        printf("\n");
        for (i = 0;i < 3;i++)
        {
              for (j = 0;j < 3;j++)
              {
                      printf("%d\t",b[0][i][j]);
                      k++;                              // 为了方面数组的美观,计数( 下同 )
                      if(k == 3)
                      {
                            printf("\n");             // 满三个元素换行( 下同 )
                            k = 0;
                      }
               }
        }
        printf("\n");
        k = 0;
        for (i = 0;i < 3;i++)
        {
              for (j = 0;j < 3;j++)
              {
                    printf("%d\t",b[1][i][j]);
                    k++;
                    if(k == 3)
                    {
                          printf("\n");
                          k = 0;
                    }
              }
        }
        printf("\n");
        k = 0;
        for (i = 0;i < 3;i++)
        {
               for (j = 0;j < 3;j++)
              {
                     printf("%d\t",b[2][i][j]);
                     k++;
                     if(k == 3)
                     {
                           printf("\n");
                           k = 0;
                     }
              }
        }
    printf("\n");
}
 
 | 
 
  
  |