C语言数组(5)--- 二维数组在内存中的存储
  uUWKQE7Avyk4 2023年11月02日 40 0

一.导入

我们之前使用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数组中的每一个元素都输出到屏幕上,如图所示:

C语言数组(5)--- 二维数组在内存中的存储_二维数组

那么我们是否能将二位数组的内容也全部输出到屏幕上呢?

答案是可以的,如以下代码就可以将二维数组的内容循环输出在屏幕上:

#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循环,先将每一列的内容打印出来,再将每一行的内容打印出来,如图所示:

C语言数组(5)--- 二维数组在内存中的存储_二维数组_02

既然题目是研究二维数组在内存中的存储,那我们就需要知道每一个元素的地址,我们之前讲过要打印地址就需要用 %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,然后输出相应的行和列对应的地址,如图所示:

C语言数组(5)--- 二维数组在内存中的存储_C语言_03

我们来观察一下地址,可以发现与一维数组一样,每一个元素之间的地址都相差了4,我们也可以由此得知,其实二维数组比我们之前画的简图还要简单一点,我们可以将其简化成下图:

C语言数组(5)--- 二维数组在内存中的存储_二维数组_04

所以与一维数组一样二维数组在内存中也是连续存放的,我们可以将二维数组看成一个连续的一维数组

                                                                                                                   2023/8/24

                                                                                                                      王起舟

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zLxnEsMLk4BL   2023年11月19日   35   0   0 数组字符串数组名
  gBkHYLY8jvYd   2023年11月19日   27   0   0 #include数组ci
  gBkHYLY8jvYd   2023年11月19日   24   0   0 cifor循环字符串
  X5zJxoD00Cah   2023年11月19日   21   0   0 数组单引号字符串
  gBkHYLY8jvYd   2023年12月10日   23   0   0 #include数组i++
uUWKQE7Avyk4