C语言之详解静态变量static

2023-11-07

在C语言中static是用来修饰变量和函数的,这篇文章详细介绍了static主要作用,文章中有详细的代码实例,需要的朋友可以参考阅读

在C语言中:

static是用来修饰变量和函数的

static主要作用为:

1. 修饰局部变量 - 静态局部变量

2. 修饰全局变量 - 静态全局变量

3. 修饰函数 - 静态函数

 在讲解静态变量之前,我们应该了解静态变量和其他变量的区别:

 

修饰局部变量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

//代码1

#include <stdio.h>

void test()

{

    int i = 0;

    i++;

    printf("%d ", i);

}

int main()

{

 int i = 0;

    for(i=0; i<10; i++)

   {

        test();

   }

    return 0;

}

运行结果:

 

调用静态变量static

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

//代码2

#include <stdio.h>

void test()

{

    //static修饰局部变量

    static int i = 0;

    i++;

    printf("%d ", i);

}

int main()

{

 int i = 0;

    for(i=0; i<10; i++)

   {

        test();

   }

    return 0;

}

运行结果:

 

对比代码1和代码2的效果理解static修饰局部变量的意义.

结论:

static修饰局部变量 改变了变量的生命周期 ,让静态局部变量出了作用域依然存在,到程序结 束,生命周期才结束。

 修饰全局变量 

1

2

//add.c

int g_val = 2018;

1

2

3

4

5

6

7

8

9

//代码2

//add.c

extern int g_val;

//test.c

int main()

{

    printf("%d\n", g_val);

    return 0;

}

代码执行:

 

当给int g_val添加static静态变量进行修饰后,发生报错

代码执行:

 

结论:

全局变量本身是具有外部链接属性的

在A文件中定义的变量,在B文件中可以通过【链接】使用

但如果全局变量被static修饰后,这个外部链接属性就变成了内部链接属性,这个全局变量只能在本身源文件内使用

static可以把外部链接属性,变成内部链接属性,使得全局变量作用域变小

 修饰函数

 

 

结论:

函数本身是具有外部链接属性的

被static修饰后,外部链接属性变成了内部链接属性

使得这个函数只能在自己所在的源文件内部使用,其他源文件无法链接使用

到此这篇关于C语言之详解静态变量static的文章就介绍到这了,更多相关C语言staiic详解内容请关注我了解后续

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言之详解静态变量static 的相关文章

随机推荐

  • 学习笔记2(自用)

    一 emmet语法 1 简介 Emmet语法的前身是Zen coding 它使用缩写 来提高html css的编写速度 Vscode内部已经集成该语法 快速生成HTML结构语法 快速生成CSS样式语法 2 快速生成HTML结构语法 生成标签
  • 华为OD机试真题-路灯照明问题-2023年OD统一考试(B卷)

    题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和 输入描述 第一行为一个数N 表示路灯个数 1 lt N lt
  • Apipost使用技巧

    前言 随着web技术的发展 特别是前后端分离的架构主键成为主流 我们后端程序员调试的时候不再依赖页面去操作 而是直接调试接口 对于没有权限控制的GET接口而言 这是一个非常轻松的工作 但是对于有权限的或者使用了其他方法 POST PUT D
  • 哈工大C语言程序设计精髓-数据区间判断

    题目内容 从键盘输入一个int型的正整数n 已知 0
  • 持续集成(CI)持续部署(CD) 简介

    定义 一天中多次的将所有工作者的工作合并到一个共享的主线的协作方式 具体来说是开发人员提交新代码后立即进行构建 测试 根据测试结果我们可以确定新代码和原代码是否能正确的集成到一起 CI CD的意义和价值 敏捷开发思想的体现 频繁 自动化 可
  • Winform 当Panel等容器类控件 失去焦点再获得焦点后,滚动条复位的解决方式

    public class MyPanel Panel
  • 苹果cms微信对接php,苹果cmsV10微信公众号对接插件安装教程

    常见问题解决办法 1 无法对接微信公众号 提示 参数错误 解决办法 找一个未被腾讯拦截的域名 不需要备案 推荐用 cn com net后缀的 解析到你网站上 做对接域名用就可以了 2 token验证失败 解决办法 如果确定token没有错
  • DVWA-Command Injection

    大约 命令注入攻击的目的是在易受攻击的应用程序中注入和执行攻击者指定的命令 在这种情况下 执行不需要的系统命令的应用程序就像一个伪系统外壳 攻击者可能会使用它 作为任何授权的系统用户 但是 命令的执行权限和环境与 Web 服务具有的权限和环
  • java判断一个数字是否为偶数的几种方式

    java判断一个数字是否为偶数的几种方式 第一种 取余 function isOdd n if n 2 0 console log n 是偶数 else if n 2 1 console log n 是奇数 else console log
  • Pytorch训练时显存分配过程探究

    对于显存不充足的炼丹研究者来说 弄清楚Pytorch显存的分配机制是很有必要的 下面直接通过实验来推出Pytorch显存的分配过程 实验实验代码如下 import torch from torch import cuda x torch z
  • 【BIOS】Bios设置通电即自动开机。

    问题需求 设置电脑 服务器接通电源后 自动开机 解决方案 不同主板的bios设置不一样 但方向都差不多 在此整理一些不同准版bios的设置方法 通用主板Bios 开机后连续按del键 进入Bios 切换到 Advanced 菜单下 找到 A
  • 使用SOLIDWORKS方程式绘制渐开线齿轮

    在SOLIDWORKS中 有时需要在参数之间建立关联 但这种关联却无法通过使用几何关系或常规的建模技术来实现 这时我们就可以使用方程式来建立模型中尺寸之间的数学关系 在方程式驱动的曲线中最经典的就是渐开线了 这也是绘制齿轮时不可或缺的线条类
  • Qt 编译错误 提示TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension(0x27a9278) is not

    编译Qt 时提示错误 TypeError Property asciify of object Core Internal UtilsJsExtension 0x27a9278 is not a functio 说明 出现这个错误的表层原因
  • LeetCode-679.24 点游戏、深度优先搜索算法DFS

    来源 力扣 LeetCode 题目分析 括号运算符仅仅表达了一个运算顺序 可以不用考虑 实际的运算类型就 4 种 一共只有 4 个数 因此所有组合的可能性是有限的 DFS 算法就是对当前的所有可能的操作进行枚举 当前的操作即从可选的数字中挑
  • 国内获取Docker镜像缓慢

    国内获取Docker镜像时 访问 https hub docker com 速度缓慢 只有几十K左右 这种情况可以使用国内的一些docker镜像 例如 网易蜂巢 阿里巴巴 LUG USTC等 此处介绍使用中国科学技术大学 LUG USTC
  • 【分享】免费的AI绘画网站(5个)

    哈喽 大家好 我是木易巷 随着人工智能技术的不断发展 越来越多的AI绘画软件开始涌现 如果你想要免费享受AI绘画的乐趣 那你可要好好看下面的内容 Vega AI创作平台 入口 https rightbrain art 一款专业的人工智能创作
  • AI 工具合辑盘点(八)持续更新 之 AI 面部生成工具和AI 角色生成工具

    一 AI 面部生成工具 需要一张真实人物的肖像画来用于你的营销材料 正在寻找具有特定面部特征的模特 但你的预算有限 正在创建你的买家人物 但不想从互联网上窃取图片 如果是这样 也许AI面部生成器可以作为解决方案 它们利用先进的图像处理技术
  • springboot 项目 docker 启动镜像 读不到application配置

    Dockerfile FROM openjdk 17 RUN cd RUN mkdir p config 删除旧jar包 RUN rm rf springboot3 jar 重新复制jar包 ARG JAR FILE ADD target
  • Maven问题:To see the full stack trace of the errors, re-run Maven with the -e switch.

    报错如下 ERROR gt Help 1 ERROR ERROR To see the full stack trace of the errors re run Maven with the e switch ERROR Re run M
  • C语言之详解静态变量static

    在C语言中static是用来修饰变量和函数的 这篇文章详细介绍了static主要作用 文章中有详细的代码实例 需要的朋友可以参考阅读 在C语言中 static是用来修饰变量和函数的 static主要作用为 1 修饰局部变量 静态局部变量 2