求解答为什么会出现这种情况
#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");
} 因为它是二维数组,每一行的第一个元素都可以理解为是一个数组的首地址; 数组名就是首元素地址,第0个p=0,然后p+1就是第1个 二维数组由一维数组组成,要求特定二维数组的元素,先要找到其所在的一维数组,再找到其在此一维数组中的位置。
举个简单的例子:
比如说要找二维数组 a 中的元素 a;
则先找到一维数组 a;
再找到其在一维数组a中的位置 a;
所以说,二维数组是一维指针数组的特殊情况:
该指针数组每个指针指向一个一维数组;
并且每个指针都是指针常量,其值不可修改;
所以你所写的例子都是指同一个常量指针
页:
[1]