一.导入
我们之前使用for循环来打印一维数组中的内容,代码如下:
#include<stdio.h>
int main(void){
int i = 0;
int arr[] = {1,2,3,4,5,6,7,8,9,0};
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < sz; i++){
printf("arr[%d] ---> %d \n",i,arr[i]);
}
getchar();
return 0;
}
我们利用sizeof()函数计算出数组元素的总个数,然后创建了for循环,当i的值小于sz的时候进入循环,将arr数组中的每一个元素都输出到屏幕上,如图所示:
那么我们是否能将二位数组的内容也全部输出到屏幕上呢?
答案是可以的,如以下代码就可以将二维数组的内容循环输出在屏幕上:
#include<stdio.h>
int main(void)
{
int arr[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, {9,10,11,12} };
int i = 0;
for (int i = 0; i < 3; i++){
int j = 0;
for (int j = 0; j < 4; j++){
printf("%d ",arr[i][j]);
}
}
getchar();
return 0;
}
我们知道在二维数组中有行和列之分,那么我们就创建两个变量分别代表行和列,这里我们使用变量 i 来代表行,变量 j 来代表列,我们只需要在for循环里面再嵌套一个for循环,先将每一列的内容打印出来,再将每一行的内容打印出来,如图所示:
既然题目是研究二维数组在内存中的存储,那我们就需要知道每一个元素的地址,我们之前讲过要打印地址就需要用 %p 来打印,代码如下:
#include<stdio.h>
int main(void)
{
int arr[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, {9,10,11,12} };
int i = 0;
for (int i = 0; i < 3; i++){
int j = 0;
for (int j = 0; j < 4; j++){
printf("&arr[%d][%d] --->%p \n",i,j,&arr[i][j]);
}
}
getchar();
return 0;
}
我们只需要将原先的%d改成%p,然后输出相应的行和列对应的地址,如图所示:
我们来观察一下地址,可以发现与一维数组一样,每一个元素之间的地址都相差了4,我们也可以由此得知,其实二维数组比我们之前画的简图还要简单一点,我们可以将其简化成下图:
所以与一维数组一样二维数组在内存中也是连续存放的,我们可以将二维数组看成一个连续的一维数组
2023/8/24
王起舟