C++中static关键字的用法

运行一个完整的程序。我们可将整个存储区分为四块:

(1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心。

(2)堆区:堆来堆去的。得要人动手。所以得我们自己手动去分配和释放。像malloc(c),new(c++) ,delete 一下等等。

(3)全局数据(静态区):全局变量和静态变量是放在一个窝里面的。静态变量如果没有初始化,系统会自动初始化的。虽然系统会自动初始化,但是分房间的时候还是得分清楚的。

    所以最终是初始化的全局变量和初始化的静态变量分在一块区域,即同一个房间。未初始化的全局变量和未初始化的静态变量分在一块。程序结束时释放。

(4)最后就是代码区了

 

staic主要由五种用法:

(a)如果用static修饰局部函数的变量。那么这个变量就是静态变量了。在主函数中,如果重复调用这个函数,那么里面的这个静态变量只会初始化一次。如果没有用static修饰,那么每次

   调用的时候都会对这个变量进行初始化。

(b)如果用static修饰全局的变量。那么在这个文件中所有的函数都可以使用这个变量。如果一个工程里面有a.c和b.c文件,static在a.c中定义的。那么b.c就用不了这个static修饰的变量。如

   果没有static修饰,只要加一个extern外部调用声明,就可以了。

(c)如果用static修饰全局函数,同上(b)。

以上三点是C++中的描述,在C中也同样适用。只是C++还多了两种情况。就是在类中的修饰。

(d)static修饰类中的变量。用static修饰之后,那么这个变量的内存就分配在了全局数据区了,并不和该类在同一片区域。所以static只会被初始化一次。

(e)static修饰类中的函数。那么该函数就变成了静态函数。静态函数不能访问非静态函数,非静态函数可以访问静态函数。访问静态函数可以用(.->),指针或者类名::三种方式访问。

 

转自 https://blog.csdn.net/majianfei1023/article/details/45290467

posted @ 2020-02-26 14:30  撑雨伞的小男孩  阅读(350)  评论(0编辑  收藏  举报