- C语言没有真正意义上的二维数组。
在C语言中,二维数组的实现,只是简单的通过“线性扩展”的方式进行。
如图所示,int b[4][5]; 就是定义 4 个元素,每个元素都是一个包含 5 个整型变量的一维数组。它在内存中依然是以线性的形式存储。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ffcfce88b29d67a86f7e6c874ec0676.png)
- 弄清楚下边三个问题:
假设我们定义了二维数组 int array[4][5]
- array表示的是什么?
array表示的是一个数组指针,她的跨度是5个整型内存大小,一般是5*4 - *(array+1)表示的是什么?
表示的是array[1][0]的地址(指针),它的跨度是1个整型内存大小。 - *( *(array+1)+3) 表示的是什么?
表示的是array[1][3]的整型值。
- 数组指针和二维数组:
二维数组我的理解是有三个指针,分别是一个表示二维数组的指针,一个表示一维数组跨度的指针和一个表示相应类型跨度的指针。指针套指针,只是指针指向的范围不一样。就像刻度尺一样。
#include <stdio.h>
int main()
{
int array[2][3] = {{0, 1, 2}, {3, 4, 5}};
int (*p)[3] = array;
printf("**(p+1): %d\n", **(p+1));
printf("**(array+1): %d\n", **(array+1));
printf("array[1][0]: %d\n", array[1][0]);
printf("*(*(p+1)+2): %d\n", *(*(p+1)+2));
printf("*(*(array+1)+2): %d\n", *(*(array+1)+2));
printf("array[1][2]: %d\n", array[1][2]);
return 0;
}