c和c++中的static的用法

本文深入解析C和C++中static关键字的作用及差异,包括static在局部变量、全局变量和函数中的使用,以及在C++中对类成员函数和变量的影响。详细阐述了静态成员函数和变量的调用限制与初始化要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先在c中:

有一个区域叫做全局区或者静态区,又分为data区和bss区

static修饰局部变量为了使得变量具有全局性质,而修饰全局变量和函数都是为了其他的源文件不可见这个变量。

static如果修饰函数中的局部变量,那么之后这个函数每次调用这个变量时,都是使用上次函数运行完成之后该变量的结果。

跟函数外的全局变量作用有点相似,即这次函数A对这个变量进行修改,那么函数B使用的就是函数A修改过的结果,但是static局部变量跟全局变量还是不一样,static是仅仅这个函数内部可以改变它,其他函数不可见。

而staic修饰的全局变量表示这个全局变量只有这个文件可见,其他的文件都不可见。

所以,static修饰过的全局变量一般不跟extern连用。

因为一个为了使得其他源文件看不到这个变量,一个为了使得其他源文件可以引用这个全局变量。

而static修饰的函数就是为了使得其他的源文件无法使用这个函数。

2.在c++中:

如果static修饰类中的成员函数,因为成员函数本身就是属于类的,但是调用时,为了区分是哪个对象调用的,需要传入this指针。而static成员函数,可以直接通过类进行调用。

如果是static修饰的成员变量,因为成员变量本身是属于对象的,这里就变成属于类的,可以直接通过类进行调用。

(1)静态成员函数中不能调用非静态成员。

(2)非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的。

(3)静态成员变量使用前必须先初始化(如int MyClass::m_nNumber = 0;),否则会在linker时出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值