700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【C++】局部变量 全局变量 静态变量与动态对象的性质

【C++】局部变量 全局变量 静态变量与动态对象的性质

时间:2021-10-03 05:05:15

相关推荐

【C++】局部变量 全局变量 静态变量与动态对象的性质

【fishing-pan:/u013921430转载请注明出处】

概述

局部变量

在一个函数内部定义的变量(包括函数形参),它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的,这种类型的变量就称为“局部变量”。

局部变量存储在栈内存,在函数结束后自动销毁。

全局变量

在函数体外定义的变量,可以为本源文件中其它函数所公用,有效范围为从定义变量的位置开始到本源文件结束,这种类型的变量就称为“全局变量”。全局变量存储在静态存储区域(静态内存)。

全局变量可以被同一工程项目中其他文件用extern声明后调用,对其每次进行修改都会被保存。

静态变量

静态全局变量

静态全局变量就是在原先的全局变量前面加上了static进行修饰。静态全局变量依然存储在静态存储区。跟全局变量最大的不同在于,静态全局变量不能被其他源文件使用,只能被本源文件使用,对其每次进行修改都会被保存。

静态局部变量

静态局部变量就是在原先的局部变量前面加上了static进行修饰。静态局部变量是静态变量因此存储在静态存储区内,等到整个程序结束才会被销毁。但是它的作用域依然在函数体内部。但是自从静态局部变量被定义后,每次对其进行修改都会被保存下来。

动态对象

动态对象是程序运行时分配的对象,例如使用new和malloc分配的对象,这部分对象的生存期由程序来控制,也就是说,动态对象需要我们手动的进行销毁(使用delete和free进行销毁)。动态对象存储在堆区。

示例程序

#include <iostream>using namespace std;int global = 100; //全局变量static int sta_global = 99; //静态全局变量int P_fun(int **p){int local = 98; //局部变量;static int sta_local = 97; //静态局部变量(*p) = new int[10]; //动态对象;for (int i = 0; i < 10;){(*p)[i++] = i;}sta_global--;global--;cout << "local is" << local << endl;;cout << "sta_local is" << sta_local << endl;cout << "sta_global is" << sta_global << endl;cout << "global is" << global << endl;return sta_local--;}void main(){int *Point;int times = P_fun(&Point);cout << Point[0] << " " << endl;cout << endl << endl;delete Point; //释放内存;times = P_fun(&Point);cout << Point[0] << " " << endl;cout << endl << endl;delete Point;times = P_fun(&Point);cout << Point[0] << " " << endl;cout << endl << endl;delete Point; system("pause");return;}

程序运行结果

从上面的结果可以看出,每次调用P_fun( )后,全局变量,静态全局变量,静态局部变量的值都改变。。而局部变量却没有改变,原因就是在退出P_fun( )后,这些变量没有被销毁,而是被保存了下来。局部变量每次都进行了重新定义,每次的值都是一样的。

已完。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。