初识C语言的static关键字(修饰局部变量、全局变量和函数)

news/2024/11/25 3:48:06/

目录

学习目标

1.static 修饰局部变量

2.static 修饰全局变量

3.static 修饰函数


学习目标

  • static修饰局部变量
  • static修饰全局变量
  • static修饰函数

1.static 修饰局部变量

(1)static修饰局部变量后,这时局部变量就是静态的局部变量。
(2)一个普通的局部变量进入函数创建,出函数销毁。但是被static修饰之后,进入函数时已经创建好了,出函数的时候也不销毁,多次调用函数时,共享一个变量。主观的感受:生命周期变长了,但是作用域不变,只能在局部范围内使用。
(3)本质是:普通的局部变量是放在栈区上的,但是被static修饰后,是存放在内存的静态区的,静态区的变量生命周期和全局变量的生命周期一样

void test()
{static int i = 1;i++;//++i; i = i+1;printf("%d ", i);
}int main()
{int j = 0;while (j < 5){test();j = j + 1;}return 0;
}

有趣的现象:我们把static int i = 1;这条语句反汇编后,会发现它在运行的过程中没有对应的汇编语言去执行。

静态局部变量的初始化的时机要比普通的局部变量初始化的值要早,因为静态局部变量的值在编译时就能够确定了,而普通局部变量的值可能是需要通过一系列计算才能确定。也就是static修饰的局部变量没有汇编代码,是因为在运行前就初始化完毕了。

所以想要赋值给static修饰的局部变量,只能是常量或者字面量。变量是无法赋值给static修饰的局部变量。

 

2.static 修饰全局变量

test.c文件引用了其他源文件的全局变量,此例子是test.c文件引用了add.c文件中的全局变量g_val。

//这是test.c源文件
extern int g_val;
void test()
{printf("test():%d\n", g_val);
}int main()
{printf("%d\n", g_val);test();return 0;
}
//add.c源文件
static int g_val = 2023;

(1)全局变量是具有外部链接属性。这种属性决定了全局变量在多个文件之间可以互相使用。

(2)static修饰全局变量的时候,将外部链接属性变成了内部链接属性。g_val只能在当前的.c文件内部使用,不能在其他的.c文件中使用了。

(3)给我们的感受:改变了作用域。

3.static 修饰函数

在test.c源文件中引用add.c源文件中的函数

//test.c源文件
extern int Add(int x, int y);int main()
{int a = 3;int b = 5;int c = Add(a, b);printf("%d\n", c);return 0;
}
//add.c源文件
static int Add(int x, int y)
{return x + y;
}

(1)函数也是具有外部链接属性的,这种属性决定了函数是可以跨文件使用的。
(2)static修饰函数是把函数的外部链接属性改成了内部链接属性使得函数只能在自己所在的.c文件中使用。

(3)给我们的感受:改变了作用域。


http://www.ppmy.cn/news/539481.html

相关文章

win10卸载卡巴斯基后鼠标消失的解决方法

文原地址&#xff1a;https://alvincr.com/2021/01/mouse-disappear/ 今天&#xff08;2021.1.22&#xff09;安装卡巴斯基测试完之后卸载&#xff0c;但是卸载出现了问题&#xff0c;怎么都无法卸载成功&#xff0c;最后请出了卸载工具以及火绒粉碎&#xff0c;结果重启之后鼠…

卡巴斯基安全软件更新失败解决办法

当卡巴斯基安全软件更新失败时&#xff0c;比如更新到20%就突然跳出、卡住不动等&#xff0c;可以进入这个页面 然后选择更新源&#xff0c;这里我附上卡巴斯基官网的最新更新源&#xff0c;大家可以直接复制&#xff0c;也可以去这个更新源页面 http://ds.kaspersky.com http…

六款国产杀毒软件资源占用测试,八款杀毒软件横向评测:系统资源占用篇

杀毒软件的资源占用情况一直颇受用户关注&#xff0c;如果占用过高&#xff0c;会影响到实际的运行速度和整体效果&#xff0c;所以&#xff0c;很多用户也将资源占用的高低算作了重要的考核手法&#xff0c;而目前8款主流杀毒软件中&#xff0c;整体的资源占用情况如何呢&…

安装杀毒软件后计算机运行速度慢,我计算机安装杀毒软件后开机启动很慢

满意答案 6837fxua 2013.02.19 采纳率:47% 等级:12 已帮助:6153人 您好,您计算机的配置算高了,机器有点卡就是因为杀毒软件引起的,根据您的描述,请注意以下几个问题 1、一台机器只能安装一个杀毒软件!否则哪怕是再好的机器也要卡的 2、卡巴斯基曾经有很多朋友反映他有点…

杀毒软件网络测试环境,杀毒软件开学摸底测试 360杀毒基础最牢

一部全方位立体式具有超强毁灭性的史诗级灾难大片《开学》&#xff0c;已于近日起在全国各大院线同步上映。不管你是学霸还是学渣、学妹还是学长、95后还是00后&#xff0c;此时武装好你的电脑才会在新学期不败于寂寞。鉴于此咱就先拉上中外7款主流杀软&#xff0c;打一场胜者为…

卡巴斯基服务器版禁止了.dll文件,解决卡巴斯基误杀导致winnet.dll文件丢失

最近很多网友都问我&#xff0c;开机后提示winnet.dll丢失是怎么回事&#xff1f;其实有两个可能性&#xff1a; 1、卡巴斯基误杀winnet.dll文件(最近大部分都是由于这个原因) 如果你安装了卡巴斯基&#xff0c;并且卡巴斯基删除了你的winnet.dll文件。首先开机&#xff0c;如果…

卡巴斯基文件服务器,卡巴斯基更新服务器的解决方案

本帖最后由 dongwenqi 于 2015-11-18 21:17 编辑 今天我和大家一样&#xff0c;卡巴斯基更新出现问题&#xff0c;出现“xml索引已损坏&#xff0c;文件结构无效或丢失”只能提供解决方案http://downloads1.kaspersky-labs.com 更新之前&#xff0c;默认服务器 QQ截图201511182…

Spring高级面试题,你值得拥有

目录 1. 什么是Spring框架以及它的优点和缺点是什么&#xff1f;2. 请解释Spring的IoC容器和AOP的概念及其如何工作&#xff1f;3. 请解释Spring MVC框架及其工作原理&#xff1f;4. 请解释Spring Security框架及其用途&#xff1f;5. 请解释Spring Boot框架及其如何简化Spring…