C语言数组(3)--- 一维数组的内存存储
  uUWKQE7Avyk4 2023年11月02日 27 0

一.引入

我们前面已经介绍了一维数组的创建以及使用,下面我们来探究一下一维数组在内存中的存储

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void){
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < sz; i++){
		printf("&arr[%d] ---> %p\n",i,&arr[i]);
	}
	return 0;
}

这里我们创建了一个名为arr的整型数组,数组中的元素对应1-10的数字,随后我们使用sizeof()函数计算出元素的个数,然后将值赋给变量sz

原理:先使用sizeof()获取到数组总大小再除以数组中第一个元素的大小最后得出的结果就是元素的总个数

随后我们创建了一个for循环,当变量i的值小于sz的时候则进入循环,这里注意我们使用printf()函数来打印数组中每一个元素的地址,既然是打印地址那就需要用到%p(pointer),使用取地址操作符&来获取每一个元素的地址,最后在屏幕上输出,如图所示:

C语言数组(3)--- 一维数组的内存存储_数组

其实这些数字也是有规律可循的,注意这里输出的是16进制数,生活中我们常用十进制数字

下图是两者的区别:

C语言数组(3)--- 一维数组的内存存储_一维数组_02

由于16进制是逢16进1所以使用了A B C D E F 字母来代替10 11 12 13 14 15,回到程序中我们再来看一下有什么规律:

C语言数组(3)--- 一维数组的内存存储_内存_03

我们可以发现每一个地址都与上一个地址差了4,要解释这个问题也不难,我们之前说过这是一个整型数组,那么每一个元素的类型就是整型,整型在内存中占用4个字节,所以导致每一个地址都与上一个地址差4,我们还能得出数组在内存中是连续存放的,随着数组下标的增长,元素的地址也在有规律的递增

C语言数组(3)--- 一维数组的内存存储_数组_04

                                                                                                                                2023/8/22

                                                                                                                                     王起舟

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

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

暂无评论

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