【发布时间】:2013-10-25 19:29:46
【问题描述】:
基本上我的问题是单个地址占用/拥有多少字节?
我的意思是 char 在我的平台上占用 1 个字节并有 1 个地址。但是int 需要 4 个字节。这个int 占用多少个地址?它仍然只有 1 个地址还是有 4 个?
例如:
char c = 'A'; //Address at 0xdeadbeee
int i = 45846; //Address at 0xdeadbeef
int* iPtr = &i;
iPtr++; //Address at 0xdeadbef3 now
0xdeadbeef 和 0xdeadbef3 之间的地址会发生什么情况?它们都是为i 保留的吗?当我指向0xdeadbeee(应该是一个地址| 字节或i 下的任何内容)并更改它的值时,我会发生什么?
编辑: 对于那些仍然会回答的人,我不想知道整数有多大。我想知道在占用 4 个字节的内存时它是否也有 4 个地址,以及在更改其中一个地址的值时会发生什么(如果它有 4 个地址)。
我希望现在更清楚了。
【问题讨论】:
-
每个字节都是可寻址的,但
int只有一个地址。 -
“基本上我的问题是单个地址占用/拥有多少字节?” ->
sizeof(T *)会告诉你。但是您的问题实际上与“地址的大小”无关。再一次,您在问为什么指针算术以它的工作方式工作。 -
Pointer Arithmetic 的可能重复项
-
@JonathanWood “地址的大小不取决于数据的大小。” - 实际上,在 C 中,
sizeof(T1 *) == sizeof(T2 *)... -
在大多数处理器上(有人有反例吗?),内存是面向字节的,即每个字节都有一个唯一的地址。所以,从字面上看,
int确实有 4 个地址。