C/C++中static与const的区别与联系

我的机器学习教程「美团」算法工程师带你入门机器学习  以及 「三分钟系列」数据结构与算法  已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。

欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~

 

static是初学者经常搞错的概念之一,static定义的变量在程序初始化的时候会初始化在静态数据区,程序运行期间完全不变,是指这个区域不变,而内容是可以改变的。换句话说,static只是指定将其存储在静态存储区。不同于一般变量,一般变量在运行时候由程序分配内存,而静态变量编译的时候就将分配内存,比如你的问题中,a将被赋值为3,然后,如果你在程序中写a=a+1;a就会变成4,静态变量和一般变量唯一的不同就是整个程序运行期间都将存在。她所在的内存不会被释放。

这一点跟const关键字不一样,const关键字定义的是只读变量,一经赋值,再也不能改变了。但是const也是初学者经常搞错的概念之一,const代表只读变量,而不是常量,常量通常是用enum或者宏来定义的~

然后其实static主要的作用并不是来定义什么静态变量什么的,况且他也做不到这点。static最重要的作用是控制元素的作用域。被static的变量或者方法,将是只有本文件可见的!

打个比方:
我有两个文件 a.c和b.c,其中a.c中是这样的:
int _a = 1; // 这是一个全局变量
void fun() // 这是一个全局函数

{
...

}

这时候在b.c中是可以调用_a和fun()的,但是如果我加入了在_a或者fun()之前加入了static,那么两者均只能在a.c中被调用。

楼主可能会问,这有什么好处呢?
好处主要是两种:
1)不同文件的全文件变量或者函数可以采用同样的变量/函数名,方便编程,static起到了隔离文件的作用。
2)有些变量你想让他作为一个长期变量/函数,但是又不想让他成为全局变量/函数,static就有用了,因为static变量/函数跟全局变量/函数在初始化时同样是开辟在静态区的。

另外,值得注意的一点是,当初设计static的时候,因为变量将被储存在静态区域,因为副作用,初始值将全部置0x00,这一点被很多程序猿利用来对字节进行置0初值操作哦~

你可能感兴趣的:(编程之美:C/C++)