IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言关键字static的那些事儿 -> 正文阅读

[C++知识库]C语言关键字static的那些事儿

首先,来介绍一点背景知识:
计算机内存就是一块存储空间,C语言在内存中进行存储时,内存会被划分成几个不同的功能区域:
①栈区,主要存储的是局部变量以及一些函数的参数。
②堆区,主要是存放我们动态创建的对象,动态申请的临时空间等等。在这里,malloc,free,calloc,realloc这样的函数是比较常见的。
③静态区,又叫全局区,主要以存储全局变量和静态变量为主。
④常量区,一般常量和字符串就是在这里存储。
C语言中,讲究见名知义。关键字static翻译过来就是“静态的”的意思。它在C语言中的作用就主要有下面3个方面:

  • 修饰局部变量
    来看一段代码
#include <stdio.h>
int test()
{ 
	int m = 1;
	m++;
	printf("%d ", m);
	return 0;
}

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

在不使用static修饰的情况下,它的运行结果是这样的

2 2 2 2 2 2

而在使用了static关键字的情况下

#include <stdio.h>
int test()
{ 
	static int m = 1;
	m++;
	printf("%d ", m);
	return 0;
}

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

它的运行结果是这样的

2 3 4 5 6 7

对比两次的代码及其运行结果,可以发现static的使用使得局部变量即使出了它的作用域也没有被销毁。实际上,这是因为static修饰局部变量改变了变量的存储类型(栈区存储->静态存储),相对于是改变了它的生命周期。

  • 修饰全局变量

test1和test2是同一工程下两个不同的源文件,m在test2中是一个全局变量,在使用其他文件的全局变量时,首先要进行声明,这里使用extern 来声明m这个外部符号。
运行程序,产生错误:

test1.obj : error LNK2001: 无法解析的外部符号 _m

而当不使用static修饰时,程序可以正确运行。这是因为全局变量在整个工程的其他源文件内部可以被使用,就是由于它是具有外部链接属性的。可是,当全局变量被static修饰时,它的外部链接属性就变成了内部链接属性,使得它只能在自己所在的源文件内部使用,可以看做是其作用域变小了

  • 修饰函数
    static修饰函数,实际与修饰全局变量基本一致。函数同样具有外部链接属性,当被static修饰时,就具有了内部链接属性,也就只能在自己的源文件内部使用。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-23 12:18:07  更:2021-10-23 12:18:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:47:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码