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++知识库 -> 有关static的那些事 -> 正文阅读

[C++知识库]有关static的那些事

今天带大家了解的是static关键字,由于作者水平有限,如有错误,敬请谅解斧正!

在了解static之前,我们先了解一下c语言中为何要出现static这个关键字呢?学过c++的相信都知道,c++有个特性叫做封装,这个是为了程序的安全考虑的,使程序对外暴漏出的接口变少,达到安全的目的,static这个关键字亦然,也是为了程序的安全考虑,所以才会使用这个关键字,我们在写c程序的过程中,要学会将某些变量定义为static静态变量,使程序变得更加安全可靠。

然后需要给大家补充一个知识,这是一个并不被大家注意到的点,就是全局变量和全局函数能否跨文件被直接访问呢?大家首先想到的应该是不可以,为什么呢?因为我们通常所了解到的就是引入另一个函数中的函数或者变量需要用extern,但事实就是全局变量和全局函数在不进行extern声明和文件包含的情况下是可以直接使用的,就是说我们这样操作程序是可以直接运行的,当然,编译器会警告,但结果并不会出错,很意外吧,大家需要先记住这个结论,即全局变量和全局函数是可以直接跨文件访问的,当然我们写代码的时候,需要跨文件时,最好在变量前加上extern来提高代码的可读性,在以后写大型程序时方便自己的同时也方便他人,提高代码的可维护性。

好了,言归正传,接下来带大家了解一下static关键字的用法及作用。

用法格式:static 数据类型 变量名 =初值;

作用:

1、修饰全局变量,该全局变量只能在本文件内被使用,即一个源文件中定义了一个静态全局变量,在另一个源文件中将无法再使用,如果使用,编译器会报错。

2. 修饰局部变量,局部变量的作用域不改变,但生命周期发生改变,修饰后的生命周期等同于全局变量的生命周期。这个地方有一个经典的案例来帮助大家理解:

#include<stdio.h>
#include<Windows.h>
void fun1()
{	
    int i = 0;
    i++;
	printf("%d\n", i);
}
int main()
{
	for (int k= 0; k < 10; k++)
	{
		fun1();
	}
	system("pause");
	return 0;
}

运行之后呢,会输出10个1,如何理解呢?简单来说吧,每一次fun1函数的调用,都会执行int i =0;这个语句开辟内存到栈区,栈区存放是局部变量,在函数调用结束后,栈区的内存就自动释放掉了,即变量i就消失了,所以可以这么理解每一次fun1函数调用时的变量i都是一个新的变量i,都会对新的变量i进行开辟内存及赋值操作i=0,所以每一次输出的结果都是1。接下来看下面这段代码:

#include<stdio.h>
#include<Windows.h>
void fun2()
{	
    static int i = 0;
    i++;
	printf("%d\n", i);
}
int main()
{
	for (int k= 0; k < 10; k++)
	{
		fun2();
	}
	system("pause");
	return 0;
}

运行之后输出结果是1到10,很明显发现上述两段代码的不同,在这段代码中将fun2()中的变量i定义为了静态变量。static将变量i存放到了静态数据区域,变量i仍是局部变量,但生命周期已经发生改变,此时变量i的生命周期已经等同于全局变量的生命周期,即在每一次函数调用结束后,变量i所在的内存空间并未被释放,而是仍存储在内存中的静态数据存储空间中,再次调用时也不会被重新赋值,所以值随着函数的每一次调用而发生改变,并且会继承上一次调用后变量i的值,只有在整个程序运行结束后,变量i所在的内存空间才会被释放。同时,存放的内存空间位置不同正是它们生命周期不同的根本原因。接下来给大家展示一个c程序地址空间的图,来方便大家的理解。

3、修饰函数,该函数只能在本文件内使用。

事实上,大家看1和3的作用就可以看出,static对全局变量和全局函数使用后可以防止编译器对全局变量和全局函数默认的跨文件访问,有一个类似封装的特性,这种特性能够在某种程度上保证代码的安全性。

由于某些代码剪接起来较为麻烦,所以1和3就不给大家做展示了,大家可以自己敲一下代码进行感受检验一下,纸上得来终觉浅,绝知此事要躬行。

好了,今天的分享到此结束,如果大家觉得这篇文章对大家能够有所帮助的话,希望大家一个小小的赞可以吗?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:36:23  更:2021-10-15 11:38:32 
 
开发: 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 2:32:55-

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