据我了解一个字节由8位或字节的,它有一个地址分配给它我的问题是,如果我要了2个字我收到那么4个不同的地址,还是我得到一个地址对于整个Word?任何解释将不胜感激。感谢多存储器地址
多存储器地址
回答
如果做了分配,然后作为一个整体有一个地址的分配,以及每个字节中它也有一个地址。
在分配的第一个字节的地址是等于分配的地址,其余字节具有连续地址从那里向上计数。
“进行分配”包括全局变量,自动变量,new
,malloc
,为特定用途分配内存的任何内容。要使用技术术语,C和C++中的每个对象都是一系列具有连续地址的字节。
如果您的系统使用虚拟内存(几乎所有内容都是这样),则地址在虚拟地址空间中连续。它们不需要在物理内存中是连续的,但是虚拟内存的全部重点是你(程序员)可以忽略物理内存中的东西。
谢谢你的明确答案。所以如果我想分配一个像这样的'char s [] =“test”',我会得到一个整个数组的地址,但也会得到s [0],s [1],s [2],s [ [4]'对吗? –
@LeandroVillagran:是的,'s [0]'...'s [3]'将会有值''t'',''e'',''s'',''t''和' s [4]'将具有值'0'(它是nul终止字符)。你也可以看到'sizeof(s)'是'5'。 –
谢谢你的解释@Steve Jessop我真的很困惑,但现在我明白了 –
通常认为任何对象或变量的“地址”是该变量中第一个(最低)字节的地址。所以,如果你有一个类型为std :: uint64_t(8字节)的变量,则指向该变量的指针将是它的第一个字节,而下面的7个地址包含其他7个字节。现在,为了在其中这些字节存储取决于具体的实现(查找小端与大端架构)。
希望有所帮助。
感谢这加强了@Steve Jessop的答案,我实际上昨天才了解到litte和big endian。谢谢Limne –
有错过如[3],这是“t'.and S [4],它是 '\ 0'
在C中,除位字段的所有对象都从一个或多个字节制成:
C 2011(N1570)6.2.6.1表示“除了位字段,对象由一个或多个字节的连续序列组成,它们的数量,顺序和编码是明确指定的,所定义。”
当您访问由多对象ple字节,例如int
(通常),则会为您访问该对象的所有字节。
对于天然地由所述处理器的硬件支持的任何物体,也有采取单个地址,但是,从该地址开始多个字节操作加载和存储指令。例如,有“加载字”指令从一个字节的地址开始加载四个字节。 (关于“单词”的大小没有标准;它因计算机体系结构而异。)对于由C实现创建的对象(例如具有多个成员的结构体对象),C实现必须使用多条指令加载和存储对象的所有部分。
- 1. 查找存储器地址
- 2. 不同存储器地址
- 3. 编辑存储器地址
- 4. 存储器地址中存储了多少个字节?
- 5. Mongoid:IPv6地址存储
- 6. 存储多个电子邮件地址
- 7. C#静态存储器地址
- 8. 变存储器地址归属EXEC_BAD_ACESS
- 9. 存储器地址读/写VB程序
- 10. 字节地址存储器和字地址
- 11. 存储获取和存储IP地址
- 12. 以Java存储IP地址
- 13. sqlite的IP地址存储
- 14. 存储地址簿记录
- 15. 将dword存储到地址
- 16. phpmailer addBCC不存储地址
- 17. 方向堆叠更高的存储器地址的,以降低存储器地址
- 18. 存储指针地址在malloced内存
- 19. 使用单独的寄存器来存储返回地址?
- 20. 加载地址存储在MIPS寄存器中
- 21. 存储在寄存器中的变量的地址
- 22. 本地存储多个密钥存储
- 23. 基于IP地址的Google存储访问地址
- 24. 68k寄存器地址
- 25. PCIe MSI地址寄存器
- 26. 使用本地模拟存储区存储的Azure驱动器寻址
- 27. 机器内存地址的内存地址? (C语言)
- 28. 整数如何以四个存储器地址存储在存储器中,即每个地址都按位填充?
- 29. C++:将地址存储为字符串
- 30. uintptr_t太小,无法存储地址
你在问一个棘手的问题。一个词是一组字符。你有一个指向开始的地址,但是每个字符都有它自己的地址,但是指向char数组的指针仍然指向位置0。 – Chemistpp
你应该更具体,通过显示你的代码。 ''如果我要求2个单词“''是什么意思? –
C和C++以'char's不是字节计数。取决于您的平台,“char”可以是7,8,9,16位或其他任何内容。 – syam