首页 > 解决方案 > 在 C 中,静态局部变量和静态全局变量的内存分配

问题描述

在 C 中,具有相同名称声明的静态局部变量和静态全局变量都在同一个文件中完成。它们都存储在数据段内存中。

当我编译代码时为什么它没有抛出错误?

在同一个内存中可以存储2个同名变量吗?

请在下面找到代码

#include <stdio.h>
static int x = 0;

void call()
{
    printf("Adress of gloabl static =%p",&x);  
}

int main()
{
    static int x = 0;
    printf("Adress of local static =%p",&x);
    call();
}

标签: microcontrollerc

解决方案


这里有两件事。

  1. 变量范围。主要有公众x和当地人x。说xmain:x。C 默认为本地的。据我所知,当引用被本地引用覆盖时,C 没有提供访问全局引用的方法。(C++ 可以,::)

  2. static关键字的不同含义。
    2.1全局范围内的static关键字表示该对象x不能从除此文件之外的任何地方引用。即使使用extern它也会给你一个错误。这很棒,因为它可以防止在模块中意外使用“私有”对象。
    2.2 local 范围内的static关键字意味着对象x将被分配一次永久。任何实例都main()使用相同的x.
    像全局一样,但只能从范围内访问。x即使您退出 main,也会持续存在。这也意味着您不能使用初始化程序,如果不是 0,它将在上面出错。从什么时候开始初始化? 标准规定本地范围内的所有静态对象都应被初始化
    如果您需要将数据转移到函数下次运行时(尤其是中断时),但不希望数据公开,则局部静态非常有用。

静态是为多文件微控制器程序进行基本数据隐藏的一个很好的关键字。保持你的代码干净,不要乱扔全局变量。


推荐阅读