C语言深度解剖-关键字(2)

目录

1.关键字 static

源文件与头文件

static修饰全局变量

static修饰局部变量

写在最后:


1.关键字 static

源文件与头文件

平时我们在练习的时候,都只会开一个用来测试的源文件,

但是,当我们在写一个项目的时候,例如扫雷、三子棋等等,

我们就会分装成三个以上的文件进行编写 。

例:

test.c文件中:

#define _CRT_SECURE_NO_WARNINGS 1

#include "Show.h"

int main()
{
	//创建结构体变量
	A a1 = { 10 };

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

	printf("%d\n", a1.a);

	show();

	return 0;
}

Show.c文件中:

#define _CRT_SECURE_NO_WARNINGS 1

#include "Show.h"

mytype n = 10;

void show()
{
	printf("hello world\n");
}

Show.h文件中:

#pragma once

//在.h文件中
//1.C头文件
//2.所有变量声明
//3.所有函数声明
//4.#define,类型typedef,struct

#include <stdio.h>

typedef int mytype;

extern mytype n;//变量声明一定要加extern

void show();

typedef struct A
{
	mytype a;
}A;

最后打印出的结果:

输出:

输出:
10
10
hello world

这是对于分装.c文件和.h文件的一些补充知识和和说明。

static修饰全局变量

我们在show.c文件中:

#define _CRT_SECURE_NO_WARNINGS 1

#include "Show.h"

//static修饰全局变量时,
//该变量只在别文件内被访问,不能被外部文件访问
static mytype n = 10;

void show()
{
	printf("hello world\n");
}

然后编译就错误,无法通过了。

当然,static 也可以修饰函数。

#define _CRT_SECURE_NO_WARNINGS 1

#include "Show.h"

//static修饰全局变量时,
//该变量只在别文件内被访问,不能被外部文件访问
static mytype n = 10;

//同理
static void show()
{
	printf("hello world\n");
}

这样,我们可以利用static保护我们的项目。

static修饰局部变量

例:

这段代码因为 i 每次进入函数时都会重定义成1。

#include "Show.h"

void f()
{
	int i = 0;
	i++;
	printf("%d ", i);

}

void print()
{
	for (int i = 0; i < 10; i++)
	{
		f();
	}
}

int main()
{
	print();
	return 0;
}

输出:

输出:1 1 1 1 1 1 1 1 1 1

而用 static 修饰:

#include "Show.h"

void f()
{
	static int i = 0;
	i++;
	printf("%d ", i);

}

void print()
{
	for (int i = 0; i < 10; i++)
	{
		f();
	}
}

int main()
{
	print();
	return 0;
}

输出:

输出:1 2 3 4 5 6 7 8 9 10

总结:

static 修饰局部变量,更改局部变量的生命周期。

临时变量变成全局生命,但是作用域不变。

如下图:

 局部变量被放到了全局数据区,或者说静态区。

(注:在整个进程运行生命周期内,都是有效的)

而在栈区的局部变量具有临时性。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

评论 54
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戊子仲秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值