C++ static關鍵字

在這裏插入圖片描述

注:轉載請標明原文出處鏈接:https://xiongyiming.blog.csdn.net/article/details/102715255


static修飾變量和不修飾變量到底有什麼區別?
下面通過一個例子來感受一下:

1 static關鍵字

(1) 變量不用static修飾

#include <iostream>

using namespace  std;

void test()
{
	int num = 0;
	num = num + 1;;
	cout << num << endl;
}


int main()
{
	
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}


	system("pause");
	return 0;

}

結果如下:
在這裏插入圖片描述



(2) 變量使用static修飾

#include <iostream>

using namespace  std;

void test()
{
	static int num = 0;//使用static修飾變量num
	num = num + 1;;
	cout << num << endl;
}


int main()
{
	
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		test();
	}


	system("pause");
	return 0;

}

結果如下:

在這裏插入圖片描述

通過上面的例子可以發現,變量使用static修飾,變量有累加的作用。下面做個總結。
(1) 不使用static修飾,函數或者代碼塊中的變量在函數或者代碼塊執行完畢後就直接回收銷燬了,每次執行都會重新分配內存,每次都會銷燬。
(2) 不使用static修飾,那麼變量都是動態的分配存儲空間,數據儲存在動態存儲區中,這類變量稱爲自動變量,一般使用auto關鍵字修飾,實際操作中,一般auto可以省略不寫,默認爲是“自動存儲類別”
(3) 使用static修飾,函數或者代碼塊中的變量在函數或者代碼塊執行第一次初始化分配內存後,就算函數或者代碼塊執行完畢,該變量也不會被銷燬,直到程序全部結束,static變量纔會被銷燬。
(4) 當static作用於代碼塊內部的變量聲明時,static關鍵字用於修改變量的存儲類型。從自動變量變爲靜態變量,變量的屬性和作用域不受影響。
(5) 當static作用於函數定義時,或者用於代碼塊之外的變量聲明時,static關鍵字用於修改標識符的鏈接屬性。外部鏈接屬性變爲內部鏈接屬性,標識符的存儲類型和作用域不受影響。也就是說變量或者函數只能在當前源文件中訪問,不能在其他源文件中訪問。




2. static全局變量與普通的全局變量有什麼區別 ?

全局變量的說明之前加上static關鍵字就構成了靜態全局變量
全局變量本身就是靜態存儲方式, 靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上並無不同。二者區別主要在作用域上,具體區別如下:
非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由於靜態全局變量的作用域侷限於一個源文件內,只能爲該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
static全局變量只初使化一次,防止在其他文件單元中被引用;



3. static局部變量和普通局部變量有什麼區別 ?

把局部變量改變爲靜態變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變爲靜態變量後是改變了它的作用域,限制了它的使用範圍。
static局部變量只被初始化一次,下一次依據上一次結果值(有累加的作用);


4. static函數與普通函數有什麼區別?

static函數與普通函數作用域不同,僅在本文件。只在當前源文件中使用的函數應該說明爲內部函數(static修飾的函數),內部函數應該在當前源文件中說明和定義。對於可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件.



參考資料

[1] https://blog.csdn.net/tr_ainiyangyang/article/details/80965574
[2] https://blog.csdn.net/t595180928/article/details/80448249



今天的1024程序員的節日,祝大家節日快樂,身體健康!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章