欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-18 15:41:46
...

 

fishing-panhttps://blog.csdn.net/u013921430转载请注明出处】

概述

局部变量

在一个函数内部定义的变量(包括函数形参)是局部变量。

全局变量

在函数外定义的变量是局部变量。

静态变量

静态全局变量

在全局变量前加static修饰。

静态局部变量

在局部变量前加static修饰。

动态对象

程序在运行过程中动态申请内存的对象(new、malloc)

内存区

所存放对象

创建时期

销毁时期

栈内存

局部非静态对象

运行到该程序块时分配内存

离开程序块时销毁

静态内存

局部静态对象、类的static成员、所有定义在函数体外的对象

编译时分配内存

程序结束时销毁

堆内存

动态对象

运行到该程序块时分配内存

显式地销毁

 


局部变量

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

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


全局变量

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

       全局变量可以被同一工程项目中其他文件用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;
}

 

程序运行结果

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

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


已完。。