static与const的区别?又有什么联系?

如题所述

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初值操作哦~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-23
static是静态变量,用于在函数中持续记录数据,比如记录函数被调用的次数
const是常量型的,其值是只读的,不允许修改内容
区别:一个可以修改值,一个不允许修改值
联系:都是可以使用的“变量”
相似回答