全局变量和局部变量存储在C

时间:2019-05-21 09:54:26

标签: c embedded

我与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的新变量未写入内存,

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

1 个答案:

答案 0 :(得分:1)

在此代码中:

int a = 100;

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

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

int a = 100;

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

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

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

由于int a = 100;具有文件作用域,因此您无需在plus中重新声明它即可使用它-它在函数内部可见,因此您可以在不使用新声明的情况下使用它