鱼C论坛

 找回密码
 立即注册
查看: 1370|回复: 0

[技术交流] 指针与二维数组------小结与思考

[复制链接]
发表于 2017-4-9 20:13:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int array[4][5] = {0};
  5.         int i, j, k = 0;
  6.         int (*p)[5] = array;//p和array完全一样,下面出现array的地方完全可以用p取代,至于为啥要再弄个指针p来指代array,我暂时还不知道

  7.         for (i = 0; i < 4; i++)
  8.         {
  9.                 for (j = 0; j < 5; j++)
  10.                 {
  11.                         array[i][j] = k++;
  12.                 }
  13.         }
  14.         printf("sizeof int: %d\n\n", sizeof(int));
  15.         printf("array矩阵是这个样子滴:\n\n");       
  16.        
  17.         for (i = 0; i < 4; i++)
  18.         {
  19.                 for (j = 0; j < 5; j++)
  20.                 {
  21.                         printf("%2d ",array[i][j]);
  22.                 }
  23.                 printf("\n");
  24.         }
  25.         printf("\n");
  26.        
  27.         printf("array矩阵各个位置的地址是这个样子滴:\n\n");       
  28.        
  29.         for (i = 0; i < 4; i++)
  30.         {
  31.                 for (j = 0; j < 5; j++)
  32.                 {
  33.                         printf("&array[%d][%d]: %p\n",i,j,&array[i][j]);
  34.                 }
  35.         }
  36.         printf("\n");
  37.        
  38.         printf("array: %p\n", array);
  39.         printf("    p: %p\n\n", p);
  40.        
  41.         printf("    array[0][0]: %d   数组表示法\n", array[0][0]);
  42.         //printf("        p[0][0]: %d\n", p[0][0]);
  43.         printf("*(*(array+0)+0): %d   指针表示法\n", *(*(array+0)+0));
  44.         printf("   &array[0][0]: %p   数组表示法\n", &array[0][0]);
  45.         printf("   *(array+0)+0: %p   指针表示法\n\n", *(array+0)+0);
  46.        
  47.         printf("    array[0][1]: %d\n", array[0][1]);
  48.         //printf("        p[0][1]: %d\n", p[0][1]);
  49.         printf("*(*(array+0)+1): %d\n", *(*(array+0)+1));
  50.         printf("   &array[0][1]: %p\n", &array[0][1]);
  51.         printf("   *(array+0)+1: %p\n\n", *(array+0)+1);
  52.          
  53.        
  54.        
  55.         printf("*(*(array+0)+1): %d\n", *(*(array+0)+1));
  56.         //printf("    *(*(p+0)+1): %d\n", *(*(p+0)+1));
  57.         printf("    array[0][1]: %d\n", array[0][1]);
  58.         printf("   *(array+0)+1: %p\n", *(array+0)+1);
  59.         //printf("       *(p+0)+1: %p\n", *(p+0)+1);
  60.         printf("       *array+1: %p\n", *array+1);
  61.         //printf("           *p+1: %p\n\n", *p+1);
  62.        
  63.        
  64.         printf("   array + 1: %p\n", array + 1);
  65.         //printf("       p + 1: %p\n", p + 1);
  66.         printf("  *(array+1): %p\n", *(array + 1));//若取%d显示2293220,说明其本身是地址,故要取%p ,说明前面的×不是取值的意思
  67.         //printf("      *(p+1): %p\n", *(p+1));     //若取%d显示2293220,说明其本身是地址,故要取%p ,说明前面的×不是取值的意思
  68.         printf("    array[1]: %p\n", array[1]);//取%d显示2293220,说明其本身是地址,故要取%p
  69.         printf("&array[1][0]: %p\n\n", &array[1][0]);
  70.        
  71.         printf(" **(array+1): %d\n", **(array+1));
  72.         //printf("     **(p+1): %d\n", **(p+1));
  73.         printf(" array[1][0]: %d\n\n", array[1][0]);
  74.        
  75.         printf("*(*(array+1)+3): %d\n", *(*(array+1)+3));
  76.         printf("    array[1][3]: %d\n\n", array[1][3]);
  77.        
  78.        
  79.        
  80.         //printf("    *(*(p+1)+2): %d\n", *(*(p+1)+2));
  81.         printf("*(*(array+1)+2): %d\n", *(*(array+1)+2));
  82.         printf("    array[1][2]: %d\n", array[1][2]);
  83.         return 0;
  84. }
复制代码



结果如下:


sizeof int: 4

array矩阵是这个样子滴:

0  1  2  3  4
5  6  7  8  9
10 11 12 13 14
15 16 17 18 19

array矩阵各个位置的地址是这个样子滴:

&array[0][0]: 000000000022FDD0
&array[0][1]: 000000000022FDD4
&array[0][2]: 000000000022FDD8
&array[0][3]: 000000000022FDDC
&array[0][4]: 000000000022FDE0
&array[1][0]: 000000000022FDE4
&array[1][1]: 000000000022FDE8
&array[1][2]: 000000000022FDEC
&array[1][3]: 000000000022FDF0
&array[1][4]: 000000000022FDF4
&array[2][0]: 000000000022FDF8
&array[2][1]: 000000000022FDFC
&array[2][2]: 000000000022FE00
&array[2][3]: 000000000022FE04
&array[2][4]: 000000000022FE08
&array[3][0]: 000000000022FE0C
&array[3][1]: 000000000022FE10
&array[3][2]: 000000000022FE14
&array[3][3]: 000000000022FE18
&array[3][4]: 000000000022FE1C

array: 000000000022FDD0
      p: 000000000022FDD0

        array[0][0]: 0   数组表示法
*(*(array+0)+0): 0   指针表示法
     &array[0][0]: 000000000022FDD0   数组表示法
    *(array+0)+0: 000000000022FDD0   指针表示法

        array[0][1]: 1
*(*(array+0)+1): 1
     &array[0][1]: 000000000022FDD4
    *(array+0)+1: 000000000022FDD4

*(*(array+0)+1): 1
        array[0][1]: 1
    *(array+0)+1: 000000000022FDD4
           *array+1: 000000000022FDD4
          array + 1: 000000000022FDE4
        *(array+1): 000000000022FDE4
            array[1]: 000000000022FDE4
     &array[1][0]: 000000000022FDE4

**(array+1): 5
  array[1][0]: 5

*(*(array+1)+3): 8
        array[1][3]: 8

*(*(array+1)+2): 7
        array[1][2]: 7

--------------------------------
Process exited after 0.05153 seconds with return value 0
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 15:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表