c - 事物是如何存储在内存中的
问题描述
我刚开始学习 C,我了解到内存的每个字节都有一个地址。
我的问题是,占用 2 个字节内存的整数的地址是什么?
如果我们有一些需要 9 位内存的数据怎么办?我认为内存是一长块大小为 1 字节的带有地址的盒子。9 位占据一个盒子和下一个盒子的 1/9,盒子剩下的 8/9 怎么办?
解决方案
2018 C 标准在 6.2.6.1 2 中说:
除了位域,对象由一个或多个字节的连续序列组成,其数量、顺序和编码要么明确指定[在 C 标准中],要么由实现定义。
该标准允许使用位域实现灵活性。通常,连续的位域可以共享部分字节,或者实现可以将它们分开并留下一些未使用的位。
在 C 中获取对象的地址会产生一个指针。C 中的指针指向整个对象;当然,除了本身是单字节的对象之外,它们指向哪个字节没有区别。当指针转换为指向字符类型的指针时,结果是指向对象中最低寻址字节的指针(根据 6.3.2.3 7)。但是,这并不意味着原始指针是用该地址表示的。
推荐阅读
- flutter - 页面打开时我无法更改事件状态
- rust - 为什么 Valgrind 在稳定版 1.55.0 中没有*再次*检测到内存泄漏?
- c - C语言一本书的结构
- firebase - Firebase 身份验证错误密码限制
- visual-studio-code - 如何解决这个颤振仿真问题?
- javascript - React - 打印按钮不适用于所有计算机
- git - Git 代理设置以纯文本形式传递的凭据 - 安全风险问题
- php - 仅插入数据库条件为假并更新为真
- java - 我正在寻找比 4 个 for 循环更快地循环 2 个 2d 数组的方法
- c++ - 指向重载成员函数的指针的 C++ 模板参数推导