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

news2025/1/20 15:42:50

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.coloradmin.cn/o/1330789.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix和Prometheus之间的优势

一、简介 1、Prometheus Kubernetes 自从 2012 年开源以来便以不可阻挡之势成为容器领域调度和编排的领头羊。 Kubernetes 是 Google Borg 系统的开源实现&#xff0c;于此对应 Prometheus 则是 Google BorgMon 的开源实现。 Prometheus 是由 SoundCloud 开发的开源监控报警…

Stable Diffusion系列(三):网络分类与选择

文章目录 网络分类模型基座模型衍生模型二次元模型2.5D模型写实风格模型 名称解读 VAELora嵌入文件放置界面使用 网络分类 当使用SD webui绘图时&#xff0c;为了提升绘图质量&#xff0c;可以多种网络混合使用&#xff0c;可选的网络包括了模型、VAE、超网络、Lora和嵌入。 …

HBase基础知识(三):HBase架构进阶、读写流程、MemStoreFlush、StoreFile Compaction、Region Split

1. 架构原理 1&#xff09;StoreFile 保存实际数据的物理文件&#xff0c;StoreFile以HFile的形式存储在HDFS上。每个Store会有一个或多个StoreFile&#xff08;HFile&#xff09;&#xff0c;数据在每个StoreFile中都是有序的。 2&#xff09;MemStore 写缓存&#xff0c;由于…

STM32软硬件CRC测速对比

硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32&#xff0c;从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…

非阻塞 IO(NIO)

文章目录 非阻塞 IO(NIO)模型驱动程序应用程序模块使用 非阻塞 IO(NIO) 上一节中 https://blog.csdn.net/tyustli/article/details/135140523&#xff0c;使用等待队列头实现了阻塞 IO 程序使用时&#xff0c;阻塞 IO 和非阻塞 IO 的区别在于文件打开的时候是否使用了 O_NONB…

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来&#xff0c;网红直播带货“翻车”事件频发&#xff0c;给品牌商带来了信任危机和负面口碑的困扰&#xff0c;严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

搜索二叉树(超详解)

文章目录 前言查找搜索二叉树的结构insertfinderase递归版本Findinserterase 二叉树的拷贝问题搜索二叉树的应用Key模型Key/Value的模型 前言 普通二叉树其实意义不大&#xff0c; 如果用二叉树存储数据的话&#xff0c;还不如顺序表&#xff0c;链表这些。 搜索二叉树它的意义…

Python 全栈体系【四阶】(九)

第四章 机器学习 十二、逻辑回归 1. 概述 1.1 什么是逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09; 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;常用于二分类。逻辑回归因其简单、可并行化、可解释强而受到广泛应用。二分类&#xff08;…

通过使用Gromacs和MM-PBSA计算结合能

关键词&#xff1a;Gromacs、MM-PBSA、结合能、受体、配体 当前&#xff0c;Gromacs已经被广泛应用在生物&#xff0c;材料等领域的模拟计算&#xff0c;其便捷、灵活等特点受到广泛研究人员的青睐。在模拟领域&#xff0c;至关重要的一类问题是计算体系内的自由能。例如两个蛋…

【智慧办公】如何让智能会议室的电子标签实现远程、批量更新信息?东胜物联网硬件网关让解决方案更具竞争力

近年来&#xff0c;为了减少办公耗能、节能环保、降本增效&#xff0c;越来越多的企业开始从传统的办公模式转向智慧办公。 以智能会议室为例&#xff0c;会议是企业业务中不可或缺的一部分&#xff0c;但在传统办公模式下&#xff0c;一来会议前行政人员需要提前准备会议材料…

S7-1200/1500(T) 通过功能块FB38051实现 SINAMICS S200 的 EPOS 基本定位控制

SINAMICS S200 PN 是西门子推出的新一代伺服驱动系统。SINAMICS S200 将与 SIMOTICS S-1FL2伺服电机、Motion Connect 350/380 电缆相结合&#xff0c;作为新型单轴 AC/AC 伺服系统&#xff0c;增强了西门子伺服驱动产品的竞争力并扩大了西门子在标准伺服市场的产品组合覆盖范围…

HTML---浮动

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

Plantuml之对象图语法介绍(十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

什么是多域名证书?

多域名证书是一种SSL/TLS证书&#xff0c;允许在同一证书中添加多个域名。这些域名可以是不同的主机名或完全不同的域。传统的SSL证书通常只能用于一个域名&#xff0c;而多域名证书的引入使得一个证书可以涵盖多个域&#xff0c;为多站点的管理提供了便利。 多域名证书的优势 …

开启虚拟与现实的融合时代

数字人直播&#xff0c;作为一项新兴技术&#xff0c;正逐渐改变着我们的生活方式和沟通方式。它通过利用最先进的人工智能技术&#xff0c;使得虚拟形象得以与现实世界实时互动&#xff0c;为用户带来了全新的体验。本文将探讨数字人直播的意义、应用场景以及可能带来的影响。…

如何通过UMC配置外围组件

随着云计算技术的不断发展&#xff0c;在信息化建设模式上云是大势所趋。对于企业而言&#xff0c;已建立的内部集成并不能支撑其快速搭建开发环境、快速部署集群服务&#xff0c;并且动态水平扩展对多组织情况许可费用高昂、没有敏捷快速迭代机制&#xff0c;导致开发完毕就落…

MySQL部署之yum安装

MySQL https://www.mysql.com //mysql官网 yum安装步骤 yum安装 清理环境 [rootmysql ~]# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -yuserdel -r mysql[rootmysql ~]# rm -rf /etc/my* && rm -rf /var/lib/mysql && rm -rf /use/bin/m…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

一文掌握分布式锁:Mysql/Redis/Zookeeper实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

羊大师解答,小孩是喝羊奶好还是牛奶好

小孩是喝羊奶还是牛奶好&#xff0c;这是一个经常让父母头疼的问题。羊奶和牛奶都是优质的乳制品&#xff0c;含有丰富的蛋白质、钙和维生素等营养成分&#xff0c;对小孩的生长发育都有重要作用。然而&#xff0c;从营养角度来看&#xff0c;两者还是有一些差异的。 羊奶和牛…