我一无所获:当我在函数内部声明变量(局部)时,它们被分配在堆栈上。引用是如何发生的?如果要为本地变量分配另一个值,是否需要知道变量在堆栈中的确切位置?这条信息是否存储在任何地方?
假设您的代码如下所示:
void main() {
int a,b;
a = 5;
b = 7;
printf("%p\n", &a);
}
此代码应在堆栈上分配两个整数,即“ a”和“ b”。然后它将打印出地址“ a”并退出。调用main时,堆栈将非常空。编译器生成的一些代码将在堆栈上分配一些空间,因此看起来像这样:
- 'a': Random data
- 'b': Random data
当您说“ a = 5;”时,您只是在告诉编译器生成一些代码,这些代码将“将数字5放入我们称为'a'的内存位置”。该内存位置“ a”恰好位于堆栈上,因此编译器将5放入堆栈中的该位置。
'b'几乎相同:
当我们获得对“ a”的引用时,我们得到的地址在堆栈上,因为这是编译器决定存储“ a”的地方。如果“ a”是全局变量,则该地址将不在堆栈中。
但是,这并不是您需要关心的。编译器应为您处理所有这些工作。这就是C编译器的优点,这就是我们使用它们的原因。C编译器可以将任何变量放在任何需要的地方,而您无需关心。您可以只说“将5放在我们称为'a'的位置”(a = 5;)或“打印出您在其中放置'a'的地址”(printf(“%p \ n”,&a); )。
简而言之,函数变量是在堆栈上分配的。您不需要知道可以在堆栈上的什么位置进行设置,也不需要关心它们在哪里,因为这就是编译器的用途。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句