gpt4 book ai didi

c - C语言中全局变量和局部变量都存储在内存中

转载 作者:行者123 更新时间:2023-11-30 19:02:14 26 4
gpt4 key购买 nike

我使用Aurix MUC,我尝试在程序执行后读取内存的内容,看看他在记忆录中写了什么

我注意到,当我在函数中使用全局变量时,该全局变量在函数中处理后的新值不会写入内存中。

这是一个例子:

int a = 100;

void plus (int a)

{

a = a + 17;

}

int main (void)

{

plus(a);

return 0;

}

当我显示内存内容时,我发现 a 的值为 100

我没有找到 a 的新值,通常为 117。

我试图将变量a声明为 volatile 的,但它没有改变任何东西

另一方面,如果我像这样直接在 main 中进行计算

int a = 100;

int main (void)

{

a = a + 17

return 0;

}

这样我就在内存中找到了值117。

所以我需要了解调用函数中使用的保存变量值在哪里?

以及为什么a的新变量没有写入内存,

为什么在 local 中声明的变量没有也写入内存中?

最佳答案

在此代码中:

int a = 100;

void plus(int a)
{
a = a + 17;
}

void plus(int a) 中的 int a 声明了 a 的新实例,隐藏前一个a。然后,在 a = a + 17; 中,使用 a 的这个新实例。要让 plus 更改在函数外部声明的 a,请使用:

int a = 100;

void plus(void)
{
a = a + 17;
}

此外,在 main 中,将 plus(a); 更改为 plus();

在 C 语言中,每个标识符都有一个范围,即源代码中可见的位置。任何函数外部的声明都具有文件范围,这意味着声明的标识符在整个文件中都是可见的(技术上是翻译单元)。在函数定义中,参数的声明具有与函数关联的 block 作用域 - 它仅在函数内可见。

由于 int a = 100; 具有文件作用域,因此您无需在 plus 中重新声明它即可使用它 — 它在函数内部可见,所以你可以直接使用它而不需要新的声明。

关于c - C语言中全局变量和局部变量都存储在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235714/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com