关键字static

常见关键字

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 <stdio.h>


void test()
{
	int a = 1;
	a++;
	printf("%d\2", 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 <stdio.h>


void test()
{
	static int a = 1;
	a++;
	printf("%d\2", 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意思是将本来全局函数的外部连结性转变为了内部连接性,导致其不能在整个工程中使用了。
 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值