【发布时间】:2016-05-14 14:56:14
【问题描述】:
我有一个令人费解的问题(至少对我来说)
假设我声明了一个整数数组:
int arr[3];
从概念上讲,内存中发生的情况是,在编译时,分配了 12 个字节来存储 3 个连续的整数,对吗? (Here's an illustration)
根据图示,示例地址
arr[0] 是1000,
arr[1] 是 1004,并且
arr[2] 是1008。
我的问题是:
如果我输出arr[0]和arr[1]的地址之间的差异:
std::cout << &arr[1] - &arr[0] << std::endl;
而不是得到4,
我惊讶地得到1。
谁能解释为什么会导致这个输出?
PS:在我的电脑上,一个 int 是 4 个字节。
【问题讨论】:
-
这是指针算法,你会收到元素的数量而不是字节数。
-
抱歉,我不太明白。处理地址(如加减乘除)就是处理字节,不是吗?
-
@Christian 不。请注意,这些是键入的地址,不像
void*。 -
@πάντα ῥεῖ 我现在明白了:D 感谢您的努力!
标签: c++ c arrays memory static-memory-allocation