首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用局部变量

引用局部变量
EN

Stack Overflow用户
提问于 2015-03-25 05:54:54
回答 2查看 58关注 0票数 0

我无法得到一件事:当我在函数中声明变量(局部变量)时,它们被分配到堆栈上。引用是如何发生的?如果要将另一个值赋值给局部变量,是否需要知道变量在堆栈上的确切位置?这段信息存储在任何地方吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 06:17:41

假设您的代码如下所示:

代码语言:javascript
复制
void main() {
  int a,b;
  a = 5;
  b = 7;
  printf("%p\n", &a);
}

这段代码应该在堆栈上分配两个int,'a‘和'b’。然后它将打印出'a‘的地址并退出。调用main时,堆栈将非常空。一些编译器生成的代码将在堆栈上分配一点空间,这样看起来如下所示:

代码语言:javascript
复制
- 'a': Random data
- 'b': Random data

当您说'a = 5;‘时,您只是告诉编译器生成一些代码,这些代码将“将数字5放入我们称为’a‘的内存位置”。这个内存位置'a‘恰好位于堆栈上,所以编译器将5放入堆栈上的那个位置。

  • ‘’:5
  • 'b':随机数据

“b”也是一样的:

  • ‘’:5
  • 'b':7

当我们得到对'a‘的引用时,我们得到堆栈上的地址,因为编译器决定在那里存储'a’。如果'a‘是一个全局变量,地址就不会在堆栈上。

不过,并不是说你需要关心。编译器应该为您处理所有这些东西。这就是C编译器的伟大之处,也是我们使用它们的原因。C编译器可以将任何变量放在任何它想要的地方,而您不需要在意。您只需说“在我们称为‘a’的位置放置5”(a =5)或“打印出您放置‘a’的地址”(printf("%p\n",&a;))。

简而言之,函数变量是在堆栈上分配的。您不需要知道堆栈上的位置才能设置它们,也不需要关心它们在哪里,因为编译器就是这样做的。

票数 2
EN

Stack Overflow用户

发布于 2015-03-25 06:05:11

您不必关心变量在堆栈中的位置。在编译代码时,编译器将处理这些有关变量将存储在哪里以及如何引用变量的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29248416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档