C/C++教程

C静态变量

本文主要是介绍C静态变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

静态变量是指在内存中原地不动

局部静态变量

使用static关键字在某个块内声明一个变量。

#include<stdio.h>
#include<stdlib.h>
void fun(void);
int main(void)
{
    for(int i=0;i<3;i++)
        fun();
    return 0;
}
void fun(void)
{
    int a = 1;  // 每执行一次函数就会执行一次
    static int b = 1;  // 局部静态变量,只有在这个函数内才可以访问
    // 静态变量和外部变量在程序载入内存时就执行完毕,所以上面的语句在调用函数时会跳过
    // 声明发在这里是指只有fun函数能访问。
    printf("a = %d, b = %d\n", a,b);
    b++;

}

外部连接的静态变量

外部连接的静态变量具有文件作用域、外部链接和静态存储期,也成为外部存储类别。该类别变量称为外部变量。
在所有函数外面创建外部变量。可以在函数内部使用extern关键字显示声明使用一个外部变量。
当外部变量定义在另一个源码文件中时必须使用extern

#include<stdio.h>

int ex_var = 10;  // 外部变量, 定义式声明
// 外部变量如果未初始化会被自动初始化未0
// 自动变量即块中或函数头的局部变量未初始化情况下不一定为0
// 外部变量的初始化必须使用常量表达式,只要不是变长数组sizeof表达式也视为常量表达式。

// int x=2;
// int y = 2*x;  // 这一行会报错,x是变量不能用变量初始化外部变量。

void fun(void);
void fun2(void);

int main(void)
{
    extern int ex_var;  // 引用式声明,关键字extern表明该声明不是定义编译器要到别处查询定义
    for(int i=0;i<3;i++)
    {
        fun();
        fun2();

    }
    return 0;
        
}
void fun(void)
{
    printf("fun1: %d\n", ex_var);
    ex_var++;
}
void fun2(void)
{
    // auto 关键字显示的声明变量是一个自动变量也就是非静态自动变量。
    auto int ex_var = 20;
    printf("fun2: %d\n", ex_var);
    ex_var++;
}

内部链接的静态变量

使用static关键字在函数外部定义变量。具有静态存储期、文件作用域和内部链接。只能由同一文件内的函数使用。

#include<stdio.h>
static int intern_var = 10;  // 使用static关键字
void fun(void);
int main(void)
{
    for(int i=0;i<3;i++)
    {
        fun();
    }
}
void fun(void)
{
    printf("%d\n", intern_var);
    intern_var++;
}
这篇关于C静态变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!