繁体   English   中英

全局变量和局部变量存储在C中的内存中的位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM