当我写:
int a;
int c;
OR
int a, c;
a
和c
何时存储在内存中的相邻位置? ((&a+1)
等于&c
?)答案 0 :(得分:3)
不,您不能保证a
和c
位于内存的相邻位置,但通常情况就是如此。我相信通常 &a - 1
将等于&c
,因为堆栈通常向下增长。
如果你想要连续变量,那就使用一个数组。
你定义它们的方式对此有影响吗?
通常编译器不会重新排序,除非必须。例如,为了满足某些对齐或出于性能原因。
此外,正如Mysticial所说,编译器有时可以优化变量,因此它们根本不存在于内存中。
答案 1 :(得分:1)
编译器可以随意将它们放在任何地方。没有办法保证他们的位置。当您需要它们时,您可以将它们声明为包含两个元素的数组。
答案 2 :(得分:1)
在任何一种情况下都没有必要相邻地存储整数a
和c
。 C标准不要求这样的事情。
即使你观察到这些事情,你也不能依赖它,没有实际用途。