欢迎关注笔者,你的支持是持续更博的最大动力
目录
相关描述代码举例相关阅读其他相关描述
局部变量:定义在函数内部的变量(函数的形参也是局部变量),只能在定义它的函数内部使用
全局变量:定义在函数外面的变量,所有函数都可以使用
静态变量:有全局变量、前面加了“static”关键字的局部变量
区别:
静态变量的存放地址,在整个程序运行期间,都是固定不变的。非静态变量(一定是局部变量)地址每次函数调用时都可能不同,只在函数的一次执行期间不变
如果没明确初始化,则静态变量会被自动初始化成全0(每个bit都是0),局部非静态变量的值则随机
代码举例
下面是两段代码,除了第2段多了“static”关键字,其他内容一模一样,但输出结果却不同。
非静态变量
void Func(){int n = 4;//初始化语句 将非静态局部变量n初始化为4,且每次执行Func函数都会运行这一行cout << n << endl; //输出4++n;}int main(){Func(); Func(); Func(); //在主函数中调用Func函数三次}
这段代码将输出:
4
4
4
因为每次调用Fun函数,都执行了初始化语句,使得 n = 4, 不论 ++n执行多少次,下次调用函数时,还是会先初始化n。
静态变量
void Func(){static int n = 4; //初始化语句,有static关键字 将静态局部变量n初始化为4,只在函数第一次被执行的时候执行,静态变量地址固定cout << n << endl; //输出当前n的值,不一定是4++n;}int main(){Func(); Func(); Func(); //在主函数中调用Func函数三次}
这段代码将输出:
4
5
6
因为只有第1次调用Func函数时,才执行初始化语句,使得 n = 4,下次执行的时候,不会再执行初始化语句了。所以,第2次、第3次调用Fun函数时,n没有初始化,n的值是上一次调用函数后n的值。
从上面两段代码,可看出静态变量和非静态变量的区别。
相关阅读
int main 是什么其他
日常vlog: 点这里去B站~