最帅的 发表于 2019-8-7 14:43:27

求解答为什么会出现这种情况

#include<stdio.h>
#include<stdlib.h>
int main()

{
      int temp = {

                {0,1,2,3,4},
                {5,6,7,8,9},
                {10,11,12,13,14},
                {15,16,17,18,19}
      };
      int(*p)=temp;

      printf("%p\n",p+1);            //有没有*符号,打印的地址一样,都是temp地址
      printf("%p\n", *(p+1));
      printf("%p\n", temp+1);
      printf("%p\n", *(temp + 1));
      printf("%p\n", &temp);
      system("pause");
}

mqcake 发表于 2019-8-7 16:21:48

因为它是二维数组,每一行的第一个元素都可以理解为是一个数组的首地址;

AmosAlbert 发表于 2019-8-7 16:26:07

数组名就是首元素地址,第0个p=0,然后p+1就是第1个

新学 发表于 2019-8-7 21:38:14

二维数组由一维数组组成,要求特定二维数组的元素,先要找到其所在的一维数组,再找到其在此一维数组中的位置。
举个简单的例子:
比如说要找二维数组 a 中的元素 a;
则先找到一维数组 a;
再找到其在一维数组a中的位置 a;
所以说,二维数组是一维指针数组的特殊情况:
该指针数组每个指针指向一个一维数组;
并且每个指针都是指针常量,其值不可修改;
所以你所写的例子都是指同一个常量指针
页: [1]
查看完整版本: 求解答为什么会出现这种情况