首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言入门知识点(7.1函数补充)(超详细)

C语言入门知识点(7.1函数补充)(超详细)

作者头像
say-fall
发布2026-01-15 09:59:12
发布2026-01-15 09:59:12
790
举报
对于函数的一些补充

在这里插入图片描述
在这里插入图片描述
8.3static和extern

staticextern都是C语言中的关键字。 static静态的 的意思,可以用来:

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

extern是用来声明外部符号的。

在了解这两个关键字之前,先来了解一下作用域和生命周期。

**作用域(scope)**是程序设计概念,通俗来说就是一个名称的适用范围就是这个名称的作用域。

  • 局部变量的作用域是变量所在的局部范围
  • 全局变量的作用域是整个工程(项目)

生命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。

  • 局部变量的生命周期:进入作用域创建变量,生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期:整个程序的生命周期
8.3.1static修饰局部变量

先来看两段代码:

代码语言:javascript
复制
//不用static修饰
#include <stdio.h>

void test()
{
	int a = 1;
	a++;
	printf("%d ", a);
	return;
}

int main()
{
	int i = 0;
	for (i = 0;i < 5;i++)
		test();
	return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
//用static修饰
#include <stdio.h>

void test()
{
	static int a = 1;
	a++;
	printf("%d ", a);
	return;
}

int main()
{
	int i = 0;
	for (i = 0;i < 5;i++)
		test();
	return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述

为什么会造成两种运行结果的不统一呢?

我们先来了解一下内存是如何储存的

栈区

堆区

静态区

局部变量、函数参数

动态内存管理

全局变量、静态变量

这是内存内部的一部分结构

  • 在未使用static修饰的时候,a这个变量是储存在栈区里面的,每次函数循环重新创建变量a
  • 在使用static修饰的时候,a这个变量变成了静态变量,储存在静态区,重新进入函数不会重新创建变量a

结论: static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。存储在静态区的变 量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才回收。但是作⽤域是不变的

8.3.2static修饰全局变量

如图1: 将初始化和函数主体放到两个文件中,用extern进行声明,不使用static来修饰全局变量

在这里插入图片描述
在这里插入图片描述

extern是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使⽤extern 进⾏声明,然后使⽤。

如图2: 将初始化和函数主体放到两个文件中,用extern进行声明,使用static来修饰全局变量

在这里插入图片描述
在这里插入图片描述

结论: 如我们所见,使用static修饰全局变量以后,这个全局变量就只能在本文件内部使用了。这其实是因为全局变量本来是有外部链接属性的,而添加了static以后变成了内部连接属性,就只能在本文件内部使用了,其他文件即使声明以后也不能使用。

8.3.3static修饰函数

static修饰函数和static修饰全局变量是很类似的,因为函数本身也有外部连接属性,下面我们来看例子:

如图1: 将函数的定义和调用放到两个文件中,用extern进行声明,不使用static来修饰全局变量

在这里插入图片描述
在这里插入图片描述

如图2: 将函数的定义和调用放到两个文件中,用extern进行声明,使用static来修饰全局变量

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对于函数的一些补充
  • 8.3static和extern
    • 8.3.1static修饰局部变量
    • 8.3.2static修饰全局变量
    • 8.3.3static修饰函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档