#include <stdio.h>
int main(int argc, char** argv)
{
int array[2][3] = { 0 };
int k = 0;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
array[i][j] = k++;
}
}
printf("array:%p\n", array); //array:007DFBE4
// array为二维数组首地址,指向包含3个元素的一维数组首地址的指针,类型为int(*)[],与上一篇所讲的数组指针联系起来
printf("&array:%p\n", &array); //&array:007DFBE4 与array相等,数组名就是数组地址,array类似于二级指针
printf("array+1:%p\n", array + 1);
//array + 1:007DFBF0 array+1为第二行首地址,指向包含3个元素的一维数组指针
//每次运行结果不同,可以看出,上面两者相差sizeof(int)*3=12个字节,即一行所占内存大小
printf("*(array+1):%p array[1]:%p &array[1][0]:%p\n", *(array + 1), array[1],&array[1][0]);
//*(array+1):00EFF9C4 array[1]:00EFF9C4 &array[1][0]:00EFF9C4
//运行结果一样,把第二行看成一个一维数组,则array[1]可以看成该数组的数组名
printf("**(array+1):%d\n", **(array + 1)); //**(array+1):3 第二行第一个元素
printf("*(*(array+1)+2):%d array[1][2]:%d\n", *(*(array + 1) + 2),array[1][2]);//*(*(array+1)+2):5 array[1][2]:5
//两者相等,所以*(array+1)指向第二行,再加2指向第二行第三个元素
//**********数组指针和二维数组**************
int(*p)[3] = array; //array是指向一个含有3个元素的一维数组,而数组指针也是指向整个一维数组
printf("*(*(p+1)+1):%d *(*(array+1)+1):%d array[1][1]:%d\n", *(*(p + 1)+1),*(*(array+1)+1),array[1][1]);
//*(*(p+1)+1):4 *(*(array+1)+1):4 array[1][1]:4 一样的结果 p和array都相当于于二级指针
return 0;
}
网友评论