一轮江月明 发表于 2017-4-9 20:13:19

指针与二维数组------小结与思考

#include <stdio.h>

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

        for (i = 0; i < 4; i++)
        {
                for (j = 0; j < 5; j++)
                {
                        array = k++;
                }
        }
        printf("sizeof int: %d\n\n", sizeof(int));
        printf("array矩阵是这个样子滴:\n\n");       
       
        for (i = 0; i < 4; i++)
        {
                for (j = 0; j < 5; j++)
                {
                        printf("%2d ",array);
                }
                printf("\n");
        }
        printf("\n");
       
        printf("array矩阵各个位置的地址是这个样子滴:\n\n");       
       
        for (i = 0; i < 4; i++)
        {
                for (j = 0; j < 5; j++)
                {
                        printf("&array[%d][%d]: %p\n",i,j,&array);
                }
        }
        printf("\n");
       
        printf("array: %p\n", array);
        printf("    p: %p\n\n", p);
       
        printf("    array: %d   数组表示法\n", array);
        //printf("      p: %d\n", p);
        printf("*(*(array+0)+0): %d   指针表示法\n", *(*(array+0)+0));
        printf("   &array: %p   数组表示法\n", &array);
        printf("   *(array+0)+0: %p   指针表示法\n\n", *(array+0)+0);
       
        printf("    array: %d\n", array);
        //printf("      p: %d\n", p);
        printf("*(*(array+0)+1): %d\n", *(*(array+0)+1));
        printf("   &array: %p\n", &array);
        printf("   *(array+0)+1: %p\n\n", *(array+0)+1);
       
       
       
        printf("*(*(array+0)+1): %d\n", *(*(array+0)+1));
        //printf("    *(*(p+0)+1): %d\n", *(*(p+0)+1));
        printf("    array: %d\n", array);
        printf("   *(array+0)+1: %p\n", *(array+0)+1);
        //printf("       *(p+0)+1: %p\n", *(p+0)+1);
        printf("       *array+1: %p\n", *array+1);
        //printf("         *p+1: %p\n\n", *p+1);
       
       
        printf("   array + 1: %p\n", array + 1);
        //printf("       p + 1: %p\n", p + 1);
        printf("*(array+1): %p\n", *(array + 1));//若取%d显示2293220,说明其本身是地址,故要取%p ,说明前面的×不是取值的意思
        //printf("      *(p+1): %p\n", *(p+1));   //若取%d显示2293220,说明其本身是地址,故要取%p ,说明前面的×不是取值的意思
        printf("    array: %p\n", array);//取%d显示2293220,说明其本身是地址,故要取%p
        printf("&array: %p\n\n", &array);
       
        printf(" **(array+1): %d\n", **(array+1));
        //printf("   **(p+1): %d\n", **(p+1));
        printf(" array: %d\n\n", array);
       
        printf("*(*(array+1)+3): %d\n", *(*(array+1)+3));
        printf("    array: %d\n\n", array);
       
       
       
        //printf("    *(*(p+1)+2): %d\n", *(*(p+1)+2));
        printf("*(*(array+1)+2): %d\n", *(*(array+1)+2));
        printf("    array: %d\n", array);
        return 0;
}


结果如下:


sizeof int: 4

array矩阵是这个样子滴:

01234
56789
10 11 12 13 14
15 16 17 18 19

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

&array: 000000000022FDD0
&array: 000000000022FDD4
&array: 000000000022FDD8
&array: 000000000022FDDC
&array: 000000000022FDE0
&array: 000000000022FDE4
&array: 000000000022FDE8
&array: 000000000022FDEC
&array: 000000000022FDF0
&array: 000000000022FDF4
&array: 000000000022FDF8
&array: 000000000022FDFC
&array: 000000000022FE00
&array: 000000000022FE04
&array: 000000000022FE08
&array: 000000000022FE0C
&array: 000000000022FE10
&array: 000000000022FE14
&array: 000000000022FE18
&array: 000000000022FE1C

array: 000000000022FDD0
      p: 000000000022FDD0

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

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

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

**(array+1): 5
array: 5

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

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

--------------------------------
Process exited after 0.05153 seconds with return value 0
请按任意键继续. . .
页: [1]
查看完整版本: 指针与二维数组------小结与思考