一.引入
我们前面已经介绍了一维数组的创建以及使用,下面我们来探究一下一维数组在内存中的存储
#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),使用取地址操作符&来获取每一个元素的地址,最后在屏幕上输出,如图所示:
其实这些数字也是有规律可循的,注意这里输出的是16进制数,生活中我们常用十进制数字
下图是两者的区别:
由于16进制是逢16进1所以使用了A B C D E F 字母来代替10 11 12 13 14 15,回到程序中我们再来看一下有什么规律:
我们可以发现每一个地址都与上一个地址差了4,要解释这个问题也不难,我们之前说过这是一个整型数组,那么每一个元素的类型就是整型,整型在内存中占用4个字节,所以导致每一个地址都与上一个地址差4,我们还能得出数组在内存中是连续存放的,随着数组下标的增长,元素的地址也在有规律的递增
2023/8/22
王起舟
标签:sz,arr,元素,C语言,---,地址,数组,sizeof From: https://blog.51cto.com/u_16183773/7195002