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

标签 c embedded

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

相关文章:

c - sleep 功能会在收到信号时中止吗?

c - 32 位 CPU 处理器内存泄漏,64 位处理器 CPU 无内存泄漏

c - 将 unsigned int 值分配给 uint32_t 变量时出现 PC-Lint 错误

c++ - 初始化 int 影响函数返回值

windows - 在嵌入式和 Windows 平台上使用相同代码的可行性

c - 确定 DST 是否对给定 time_t 的指定时区有效

c - void * 类型函数参数

c - 如何在 C 程序中获得 Expect 的类似功能

linux - 禁用嵌入式 Linux 闪屏上的登录提示

用于嵌入式系统的 Java?