C语言中二维数组的存储和二进制数在底层的排列顺序

1 二维数组变量的存储

  • 二维数组在内存中是按照先行后列的顺序存储的,即先存储第一行的所有元素,再存储第二行的所有元素,以此类推。
  • 每个元素在内存中占据一定的字节数,这个字节数由该元素的类型决定。例如,int类型的元素占据4个字节,float类型的元素占据4个字节等。
  • 可以通过下标访问数组元素,例如arr[i][j]表示第i行第j列的元素。

实际例子:

#include <stdio.h>

int main() {
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    printf("arr[0][0]: %d
", arr[0][0]); // 输出:arr[0][0]: 1
    printf("arr[1][2]: %d
", arr[1][2]); // 输出:arr[1][2]: 7
    printf("arr[2][3]: %d
", arr[2][3]); // 输出:arr[2][3]: 12

    return 0;
}

在这里插入图片描述

2 二维数组的二进制表示

  • 对于整型数据,其二进制表示是由若干个比特位组成的,每个比特位可以是0或1。例如,int类型的整数占用32个比特位。
  • 对于二维数组中的每个元素,其二进制表示方式与一维数组相同,只是它们在内存中的位置不同。可以通过指针运算获取二维数组中某个元素的地址,然后将其转换为对应的二进制数。

计算机中存储排列示例:
假设有一个int类型的二维数组arr[3][4],其在计算机中的存储排列如下所示:

+------+------+------+------+
| arr[0][0] | arr[0][1] | arr[0][2] | arr[0][3] |
+------+------+------+------+
| arr[1][0] | arr[1][1] | arr[1][2] | arr[1][3] |
+------+------+------+------+
| arr[2][0] | arr[2][1] | arr[2][2] | arr[2][3] |
+------+------+------+------+

其中,每个int类型元素占用4个字节(因为int类型占用4个字节),每行有4个元素,所以每行占用16个字节(4 * 4 = 16)。因此,整个二维数组占用48个字节(3 * 16 = 48)。

实际例子:

#include <stdio.h>

int main() {
    int arr[3][4] = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };

    // 获取二维数组中某个元素的二进制表示(假设为arr[1][2])
    int binary_representation = *(int*)&arr[1][2];
    printf("The binary representation of arr[1][2]: %d
", binary_representation); // 输出:The binary representation of arr[1][2]: 7

    return 0;
}

在这里插入图片描述

3 二进制数与存储位置对应的关系

  • 计算机内存中的每个存储单元都有一个唯一的地址,该地址可以被视为二进制数。例如,对于一个int类型的整数,其在内存中的地址可以表示为一个32位的二进制数。
  • 当程序需要访问某个存储单元时,会将其地址转换为对应的二进制数,然后通过总线传输到相应的存储单元中。这个过程通常由操作系统和硬件共同完成。
  • 对于二维数组中的每个元素,其存储位置可以通过计算得到,即该元素在内存中的地址等于其所在的行数乘以每行所占用的字节数再加上该元素在该行中的偏移量。例如,对于一个int类型的二维数组,每行占用4个字节(因为int类型占用4个字节),所以第i行第j列的元素在内存中的地址可以表示为i * sizeof(int) + j * sizeof(int)。其中sizeof(int)表示int类型所占用的字节数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/265686.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习NO.9-指针(一)内存和地址,指针变量,指针变类型的意义,const修饰指针,指针运算,野指针,assret断言,指针的使用和传址调用

指针是什么&#xff1f; 指针理解的2个要点&#xff1a; 1.指针是内存中一个最小单元的编号&#xff0c;也就是地址&#xff1b; 2.平时口语中说的指针&#xff0c;通常指的是指针变量&#xff0c;是用来存放内存地址的变量。 总结&#xff1a;指针就是地址&#xff08;变量的地…

LIMS实验室管理软件多少钱 智慧实验室管理系统价格

随着实验室管理需求的日益复杂&#xff0c;实验室信息管理系统(LIMS)逐渐成为实验室管理的必备工具。然而&#xff0c;对于许多实验室而言&#xff0c;选择合适的LIMS系统是一项挑战&#xff0c;其中价格是一个重要的考虑因素。本文将以白码LIMS系统为例&#xff0c;探讨LIMS实…

不忍学弟学妹受苦受难!!!逐一讲解发动机原理实验报告(2)

固体火箭发动机动态燃速测试实验 二、实验数据 1、药柱的具体结构&#xff08;绘制&#xff09;这个参考实验报告册即可&#xff0c;原图。 有时候我也纳闷&#xff0c;原图你还让学生抄什么抄呢&#xff1f; 2、实验采集到的P-t和F-t曲线图&#xff08;我做的仅供参考&…

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32&#xff0c;其 FLASH 容量也有所不同&#xff0c;最小的只有 16K 字节&#xff0c;最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

又老性能又差,为什么好多公司依然选择 RabbitMQ?

大家好&#xff0c;我是君哥。 RabbitMQ 这个消息队列相信很多程序员都用过&#xff0c;我第一次使用是在 2016 年&#xff0c;确实是一个老牌的消息队列了&#xff0c;但是为什么一直没有被淘汰呢&#xff1f;今天来聊一聊这个话题。 老旧差 发布历史 为什么说 RabbitMQ 老…

HTML---浮动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.常见的网页布局 二.标准文档流 标准文档流常见标签 标准文档流的组成 块级元素<div…

青少年CTF-qsnctf-A1-Misc-签到

题目环境&#xff1a; 题目难度&#xff1a;★题目描述&#xff1a;有没有可能&#xff0c;这个平台就是个题目&#xff1f; 一道杂项题 题目说的是这个平台就是题目 那么也就是说flag就在这个平台里面1.从高层次向低层次逐一排查 2.首先对平台首页进行排查进平台首页 第一种解…

了解树和学习二叉树

1.树 1.1 概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因为它看 起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 注意&#xff1a;树形结构中…

什么是数据资产化?数据怎样成为资产?怎样进入资产负债表?

财政部发布的《企业数据资源相关会计处理暂行规定》将从2024年1月1日起开始实施&#xff0c;为企业数据资源入表提供了基本指引&#xff0c;数据资产化有望迎来爆发期。什么是数据资产化&#xff0c;怎样让数据成为资产&#xff0c;成为了众多国有企业、上市公司关心的问题。 —…

「Vue3面试系列」Vue3.0性能提升主要是通过哪几方面体现的?

文章目录 一、编译阶段diff算法优化静态提升事件监听缓存SSR优化 二、源码体积三、响应式系统参考文献 一、编译阶段 回顾Vue2&#xff0c;我们知道每个组件实例都对应一个 watcher 实例&#xff0c;它会在组件渲染的过程中把用到的数据property记录为依赖&#xff0c;当依赖发…

C语言学习NO.10-指针(二)数组名的理解,使用指针访问数组,一维数组传参的本质,冒泡排序,二级指针,指针数组,指针数组模拟二维数组

一、数组名的理解 //使用指针访问数组的内容 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int* p &arr[0]; 这里我们使用&arr[0]的方式拿到了数组第一个元素的地址&#xff0c;但是其实数组名本来就是地址&#xff0c;而且是数组首元素的地址。 #include <stdio.h>…

全国“兽医”专业大学生知识竞赛策划方案

一、初赛&#xff1a;参赛者通过网络平台进行答题。 各校大学生均可在“大赛官网”登录&#xff0c;填写真实姓名、学校、联系方式、身份证号、学号等信息&#xff0c;即可答题参赛。 系统将随机从题库中抽取50道题&#xff0c;满分100分&#xff0c;其中&#xff0c;单选题20…

Prometheus API 使用介绍|收藏

​ &#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试…

通过windows cng api 实现rsa非对称加密

参考&#xff1a; 1,使用 CNG 加密数据 - Win32 apps | Microsoft Learn 2,不记得了 &#xff08;下文通过cng api演示rsa加密&#xff0c;不做原理性介绍&#xff09; 相对于aes等对称加密算法&#xff0c;rsa加密算法不可逆性更强。非对称加密在通常情况下&#xff0c;使…

STM32烧录口锁死问题解决

前言 我在给STM32单片机下载程序时&#xff0c;出现下载成功一次后&#xff0c;后面就下载不了了&#xff0c;识别不到下载器设备&#xff0c;经过排查&#xff0c;最终确认是代码配置有误&#xff0c;导致板子烧录口锁死&#xff0c;下面我将把问题的出现到问题的解决进行复现…

LZ码基本概念

LZ码是一种无损压缩算法&#xff0c;由Lempel和Ziv两位计算机科学家提出并命名。它是一种基于字典的压缩方法&#xff0c;可以将数据有效地压缩存储&#xff0c;同时实现高效的解压缩。 LZ码的基本概念是利用字典来存储先前遇到的字符串&#xff0c;然后用较短的代表符号来表示…

R软件包ConsensusCluster进行共识聚类(Consensus Clustering)

从下面论文看到这个方法&#xff1a; Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. 这篇论文基于 AI 方法对 bulk RNA-seq 数据识别肿瘤微环…

2023年12月GESP Python五级编程题真题解析

【五级编程题1】 【试题名称】&#xff1a;小杨的幸运数 【问题描述】 小杨认为&#xff0c;所有大于等于a的完全平方数都是他的超级幸运数。 小杨还认为&#xff0c;所有超级幸运数的倍数都是他的幸运数。自然地&#xff0c;小杨的所有超级幸运数也都是幸运数。 对于一个…

AI 视频 | 又一款 AI 视频工具火爆全网!DomoAI 实测体验如何?

一、引言 前几期介绍了几款常用的 AI 视频工具&#xff1a;Moonvalley、Runway Gen-2、Stable Video Diffusion&#xff0c;NeverEnds&#xff0c;对 AI 视频工具感兴趣的小伙伴可以移步之前的几篇文章。 程序员X小鹿&#xff1a;【AI视频】免费的 AI 视频生成工具 Moonvalley…

纯搬运 solidworks 2021卸载方法,怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件?

纯搬运 solidworks 2021卸载方法&#xff0c;怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件&#xff1f; 网址&#xff1a; solidworks 2021卸载方法&#xff0c;怎么完全彻底卸载删除清理干净solidworks 2021各种残留注册表和文件&#xff1f; solidworks…
最新文章