欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

关键字static

时间:2023-05-29

常见关键字

auto break case char const continue default do double else enum extern float for goto if int register return short signed sizeof static struct switch typedef union unsigned void volatile while

其中static关键字较为重要,这里单独说一下

static关键字有三个作用1.修饰局部变量2、修饰全局变量3、修饰函数

1、修饰局部变量

首先看这样一串代码

#define _CRT_SECURE_NO_WARNINGS#include void test(){int a = 1;a++;printf("%d2", a);}int main(){int i = 0;while (i < 10){test();i++;}return 0;}

上述代码输出结果如下

上述代码中局部变量a没有加上static,所以每次跳出循环,a的值又会变成a++的值是2,所以每次输出的值都是2

现在看看在局部变量a之前加上static,如下代码段

#define _CRT_SECURE_NO_WARNINGS#include void test(){static int a = 1;a++;printf("%d2", a);}int main(){int i = 0;while (i < 10){test();i++;}return 0;}

上述代码段输出结果如下

加入static关键字,每次输出的a的值都保留下来了,所以会在原有基础上++

2、修饰全局变量

首先在一个源文件定义一个全局变量

再在另一个源文件下输出这个全局变量

可以看见全局变量g_val可以正常输出。

现在,若是在定义全局变量的时候在加上static

然后继续在另一个源文件下输出这个全局变量

 可以看见,出错了,用static定义的全局变量在另一个源文件下无法输出,这是因为static定义的全局变量只能在自己的内部的.c源文件中使用,但是在整个工程中不能使用,但是一般定义的全局变量可以在整个工程中使用。 全局变量,其他文件可以使用是因为全局变量具有外部连结性。但是static修饰了全局变量之后,就具有了内部连接属性,所以就不能在整个工程中使用了。

3、static修饰全局函数

首先在一个源文件下定义一个全局函数,如下

再在另一个源文件下调用这个函数,调用之后如下

可以看见,正常情况下定义的全局函数是可以在其他源文件下调用的

现在再在定义全局函数的时候加上static

再在其他源文件下调用,结果如下

调用出错,这是因为与static修饰全局变量类似,在全局函数加上static意思是将本来全局函数的外部连结性转变为了内部连接性,导致其不能在整个工程中使用了。
 

 

 

 

 

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。