引用局部变量

用户名

我一无所获:当我在函数内部声明变量(局部)时,它们被分配在堆栈上。引用是如何发生的?如果要为本地变量分配另一个值,是否需要知道变量在堆栈中的确切位置?这条信息是否存储在任何地方?

异蟾蜍

假设您的代码如下所示:

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放入堆栈中的该位置。

  • 'a':5
  • 'b':随机数据

'b'几乎相同:

  • 'a':5
  • 'b':7

当我们获得对“ a”的引用时,我们得到的地址在堆栈上,因为这是编译器决定存储“ a”的地方。如果“ a”是全局变量,则该地址将不在堆栈中。

但是,这并不是您需要关心的。编译器应为您处理所有这些工作。这就是C编译器的优点,这就是我们使用它们的原因。C编译器可以将任何变量放在任何需要的地方,而您无需关心。您可以只说“将5放在我们称为'a'的位置”(a = 5;)或“打印出您在其中放置'a'的地址”(printf(“%p \ n”,&a); )。

简而言之,函数变量是在堆栈上分配的。您不需要知道可以在堆栈上的什么位置进行设置,也不需要关心它们在哪里,因为这就是编译器的用途。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Powershell:从委托引用局部变量

来自分类Dev

检查局部变量

来自分类Dev

UnboundLocalError:分配前引用的局部变量

来自分类Dev

同步局部变量

来自分类Dev

分配之前引用的Pygame局部变量

来自分类Dev

Tasm局部变量

来自分类Dev

setTimeout与局部变量?

来自分类Dev

分配前引用局部变量“ x”

来自分类Dev

转义对局部变量的引用

来自分类Dev

视图引用成员变量和局部变量之间的区别

来自分类Dev

PyGame局部变量

来自分类Dev

分配前引用的局部变量-错误

来自分类Dev

分配错误之前引用的局部变量

来自分类Dev

当通过引用传递局部变量时,c ++如何处理局部变量的内存?

来自分类Dev

SQL局部变量

来自分类Dev

赋值之前引用的局部变量“ body”

来自分类Dev

检查局部变量

来自分类Dev

Tasm局部变量

来自分类Dev

在vim中查找局部变量的引用

来自分类Dev

什么是“分配前引用的局部变量”

来自分类Dev

赋值之前引用的局部变量“ like”

来自分类Dev

引用局部变量的C ++

来自分类Dev

赋值之前引用的局部变量“ request”

来自分类Dev

赋值之前引用的局部变量“ statement”

来自分类Dev

分配前已引用局部变量“ ...”

来自分类Dev

赋值前引用的局部变量

来自分类Dev

赋值前引用的局部变量“post”

来自分类Dev

赋值前引用的局部变量“sql”

来自分类Dev

UnboundLocalError(赋值前引用的局部变量)