我使用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/