關鍵字static作用?
Static可以用作函數和變量的前綴
1、對於函數來講,static的作用僅限於隱藏
在模塊內的static變量可以被模塊內所有函數訪問,但不能被模塊外其他函數訪問。
在模塊內的static函數只可被這一模塊內的其他函數調用,這個函數的使用範圍被限制在聲明它的模塊內。
2、static變量作用
2.1函數體內static變量的作用範圍爲該函數體,不同於auto變量,該變量的內存只被分配一次,因此其值在下次調用時仍維持上次的值。
2.2static保持變量內容的持久。存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量,只不過和全局變量比起來,static可以控制變量的可見範圍,說到底static還是用來隱藏的。
#include "stdafx.h"
#include "windows.h"
void printfVal()
{
static int a = 0; //並不是每次調用該函數都初始化a = 0
printf("%d\n", a++);
}
int main()
{
for (int i = 0; i < 10; i++)
{
printfVal(); //返回結果 0,1,2,3,4,5,6,7,8,9
}
while (true)
{
Sleep(10);
}
return 0;
}
2.3static默認初始化爲0。其實全局變量也具備這一屬性,因爲全局變量也存儲在靜態數據區。在靜態數據區,內存中所有的字節默認值都是0x00,某些時候這一特點可以減少程序員的工作量。建議:聲明static變量時,程序員自己初始化變量
3.類中的static變量和static函數
3.1在類中的static成員變量屬於整個類所有,對類的所有對象只有一份拷貝。
3.2在類中的static成員函數屬於整個類所有,這個函數不接受this指針,因而只能訪問類的static成員變量。