[英]where the global and local variables are stored in memory in C
我使用Aurix MUC,我试图在执行程序后读取内存的内容,以了解他在回忆录中写的内容
我注意到当我在函数中使用全局变量时,在函数中处理后,此全局变量的新值未写入内存。
这是一个例子:
int a = 100;
void plus (int a)
{
a = a + 17;
}
int main (void)
{
plus(a);
return 0;
}
当我显示内存的内容时,我发现a的值100
并且我找不到通常为117的a的新值。
我试图将变量a声明为volatile,但它没有任何改变
另一方面,如果我像这样直接在主体中进行计算
int a = 100;
int main (void)
{
a = a + 17
return 0;
}
这样,我在内存中找到值117。
所以我需要了解在调用函数中使用的保存变量值在哪里?
以及为什么a的新变量未写入内存,
为什么在局部声明的变量也没有写在内存中?
在此代码中:
int a = 100;
void plus(int a)
{
a = a + 17;
}
int a
in int a
void plus(int a)
声明a的新实例, a
实例隐藏了先前的a
。 然后,在a = a + 17;
,则使用a
新实例。 要在函数外部plus
a
声明的a
,请使用:
int a = 100;
void plus(void)
{
a = a + 17;
}
另外,在main
,更改plus(a);
到plus();
。
在C语言中,每个标识符都有一个scope ,在哪里可见源代码。 任何函数外部的声明都具有文件范围 ,这意味着声明的标识符在整个文件中都是可见的(技术上是翻译单元 )。 在函数定义中,参数的声明具有与函数关联的块作用域 -仅在函数内可见。
因为int a = 100;
具有文件作用域,您无需plus
声明就可以使用它-它在函数内部可见,因此您可以使用它而无需新的声明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.