首页 > 系统相关 >C语言数组(3)--- 一维数组的内存存储

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

时间:2023-08-22 23:31:42浏览次数:34  
标签:sz arr 元素 C语言 --- 地址 数组 sizeof

一.引入

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

#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)--- 一维数组的内存存储_C语言

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

下图是两者的区别:

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

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

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

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

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

                                                                                                                                2023/8/22

                                                                                                                                     王起舟

标签:sz,arr,元素,C语言,---,地址,数组,sizeof
From: https://blog.51cto.com/u_16183773/7195002

相关文章

  • Leetcode 349.两个数组的交集(Intersection of two arrays)
    题目链接......
  • Oracle脚本大全(Carlos-sierra)
    https://github.com/carlos-sierra/cscriptsCSScriptsInventorybyType(2023-07-29)LatencyLoadSQLPerformanceSPBL-SQLPlanBaselinesSPRF-SQLProfilesSPCH-SQLPatchesSessionsKillSessionsBlockedSessionsLocksSpaceReportingSpaceMaintena......
  • 学习笔记:DSTAGNN: Dynamic Spatial-Temporal Aware Graph Neural Network for Traffic
    DSTAGNN:DynamicSpatial-TemporalAwareGraphNeuralNetworkforTrafficFlowForecastingICML2022论文地址:https://proceedings.mlr.press/v162/lan22a.html代码地址:https://github.com/SYLan2019/DSTAGNN一个用于时空序列预测的交通流量预测模型。可学习的地方:提出......
  • 前置++和后置++(--也一样)
    前置++表示先对对象加1,然后返回加1后的值后置++表示先对对象的运算之前的值的副本保存下来,然后对对象加1,然后返回对象运算之前的副本以上两点可以看出前置++返回的是对象本身,它是一个左值,后置版本返回的是副本它是一个临时量,它是一个右值,因此可以对前置++的结果进行改变,而不可......
  • Ubuntu 20.04编译opencv-3.1.0时报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not dec
    Ubuntu20.04源码编译安装opencv320报错error:'CODEC_FLAG_GLOBAL_HEADER'wasnotdeclaredinthisscope的解决办法:修改/opt/opencv/opencv-3.2.0/modules/videoio/src/cap_ffmpeg_impl.hpp,顶端添加如下代码:#defineAV_CODEC_FLAG_GLOBAL_HEADER(1<<22)#defineCODEC_F......
  • PQ-Tree
    为什么NOIP模拟会考到这种东西啊?PQ-Tree能解决也恐怕仅能解决如下问题:对于长度为\(n\)的排列\(p\),在线地给出\(q\)个限制,每次给定一个集合\(S\),要求在\(p\)中,\(S\)中的所有数出现位置构成一个连续段,要求对排列计数。朴素实现的PQ-Tree可以给出一个\(O(nq)\)的......
  • ceph_object-gw
    1.部署RGW#部署rgw,名称为rgw01cephorchapplyrgwrgw01#查看rgwcephorchlscephorchps--daemon_type=rgw如果需要删除则执行cephorchrmrgw.rgw012.创建对象存储用户名#创建用户radosgw-adminusercreate--access-key="cephobj"--secret="12345678"......
  • 2023-08-22 SAS数据集与Excel文件之间的批量转换 Batch File Exchange between SAS an
    参考资料:BatchFileExchangebetweenSASandExcel-theMagicofCallExecute我们经常需要在SAS和MSExcel之间传输数据。默认情况下,SASlibnameengine或PROCIMPORT/EXPORT只能在SAS和Excel之间传输单个文件。在多个文件的情况下,一个一个地传输文件会显得过于繁......
  • 剑指 Offer 51. 数组中的逆序对(困难)
    题目:classSolution{//这道题利用了归并排序(分而治之)的思想,就是在每一次排序中统计逆序对的个数public:intmergesort(intl,intr,vector<int>&nums,vector<int>&tmp){//tmp用于记录合并之前的两个子数组if(l>=r)return0;//递归......
  • 算法学习-Manacher
    什么是ManacherManacher算法可以以\(O(|S|)\)的时间复杂度求出一个字符串的最长回文子串。算法过程令\(k_i\)为以\(i\)为回文中心向右扩展到的最远的位置(即若串\(T_{l\simr}\)回文串,那么\(T\)的回文中心为\(T_{\frac{l+r}{2}}\)),注意到偶数长度的串不具有回文中心......