这是令人讨厌的问题之一,但我只是想知道。
当声明局部函数变量时,声明的顺序是否会使这些变量在内存中相对于彼此存在的位置有所不同?可以根据声明的顺序确定a和b(下面)的相对存储位置吗?
我读到订单确实有所不同,后面声明的变量(如下面的b)将具有比之前声明的更低的内存地址(如下所示)。但是,根据我的实验,我得到了不同的结果。
这是完全随机的还是可以根据声明的顺序确定相对存储位置(即“& a总是比& b更低的存储地址”)?
例如:
int func()
{
int a = 0;
char b = 'C';
b = 'D';
return ++a;
}
答案 0 :(得分:3)
简而言之,完全取决于编译器。它还取决于目标平台,优化选项等。
此外,变量甚至可能没有地址(因为它已被优化掉,存在于寄存器中等)。
在您的具体示例中,我的编译器不会为a
或b
分配任何存储空间,因此无法对其相对地址进行任何说明。