【总结】static关键字的用法及作用

比眉伴天荒 2023-07-07 12:33 59阅读 0赞

首先,我们要明确static是静态关键字。在C语言和C++中,我们都会用到static关键字,并且对于static有不同的用法和作用。接下来我将就C语言和C++两个不同的编译环境分别对static关键字的用法和作用进行讲述。

1、在C语言中,static关键字主要定义全局静态变量、局部静态变量、静态函数。

(1)定义全局静态变量:在全局变量前加上关键字static,该全局变量就变成了全局静态变量。有以下特点:

在(静态存储区)全局数据区分配内存,在整个程序运行期间一直有效。

如果未对其进行初始化,其默认值为0.

该变量在本文件内从定义开始到文件结束可见。(在其他文件内不可见)

注意:全局变量也保存在静态存储区;若未手动初始化,编译器也会为其自动初始化为0;但是,全局变量在整个工程内可见,静态全局变量只在定义的本文件内可见。

(2)定义局部静态变量:在局部变量前加上关键字static,该局部变量就变成了局部静态变量。有以下特点:

在(静态存储区)全局数据区分配内存。

如果未对其进行初始化,其将被隐式初始化为0.

始终驻留在静态存储区,知道程序运行结束。

其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之消失。

注意:局部变量作用域也为局部作用域,定义它的函数或语句块结束时,其作用域随之消失;但是局部变量在栈中分配内存;如未对其进行初始化,编译器将会给它赋随机值;局部变量会随着函数栈帧的释放而消失。

(3)定义静态函数:在函数的返回类型加上static关键字,函数就变成了静态函数。有以下特点:

静态函数只能在本源文件中使用。

在文件作用域中声明的inline函数(C++)默认为static。

使用静态函数可以在其他文件中定义同名的函数,而不用考虑会出现名字冲突或者冲定义的错误。

注意:static函数和普通函数的最大的区别在于作用域方面,static函数限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。同时static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

2、在C++中static新增了两种作用:定义静态数据成员、静态函数成员。

(1)定义静态数据成员,有以下特点

在程序的全局数据区分配

类外初始化。因为静态数据成员定义时要分配空间,所以不能在类中声明。(静态数据成员不可以用参数初始化表进行初始化操作,是因为初始化表是在定义对象的时候进行的利用了this指针进行操作)。

没有this指针。静态数据成员的存储空间不同于普通的数据成员,它不属于类的任何一个对象,是独立于对象存储的。

静态数据成员是属于一个类的而不是某一个对象,它是为该类所定义的所有的对象所共有。该类所定义的对象都可以引用该静态成员,并且值都是一样的。

注意:类中的常数据成员只能通过构造函数的参数初始化表进行初始化,且一经赋初值,不能被修改;常数据成员是实例化对象的一部分,可以用this指针访问。静态数据成员是可以被修改的,而且可以被任何一个对象修改,修改后的值,可以被所有的对象共享。

(2)静态成员函数。有如下特点:

没有this指针。

静态成员函数属于一个类而不是一个对象。

静态成员函数不能访问非静态数据成员。(非静态数据成员属于特定的类实例,主要用于对静态数据成员进行操作)

注意:如果静态成员函数要引用非静态成员时,可以通过对象来引用。从中可以看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>。

总结:其实我自己认为静态关键字可以用扩大和缩小的思想来看。首先扩大:加上静态关键字后存储区域变成了全局数据区;且只有程序运行结束才被销毁;加上静态关键字后,属于类而非对象。缩小:只在本源文件中可见。

发表评论

表情:
评论列表 (有 0 条评论,59人围观)

还没有评论,来说两句吧...

相关阅读

    相关 static关键作用

    通常情况下成员变量隶属于对象层级,每创建一个对象就需要申请独立的内存空间来存放该对象独立的成员变量信息,若所有对象的某个成员变量数值完全一样却又单独存放会造成内存空间的浪费。

    相关 static关键作用

    内存分区 1)堆:由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表,若程序员不释放,程序运行结束时由操作系统释放。 2)栈:由编译器自动分配和释放,存

    相关 static关键作用

    最近在开发中使用static关键字,发现了一些非常有趣事情,在这对static做下总结 作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。

    相关 static关键作用

    全局静态变量 在全局变量之前加上static关键字,全局变量就被定义为一个全局静态变量。全局静态变量存放在静态存储区,在整个程序运行期间一直存在。未经初始化的全局静态变量会被