ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C静态变量

2022-05-31 20:33:02  阅读:111  来源: 互联网

标签:初始化 变量 静态 void int 外部


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

局部静态变量

使用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++;
}

标签:初始化,变量,静态,void,int,外部
来源: https://www.cnblogs.com/baiyutang7/p/16332106.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有