1)限制變量的作用域:即在函數體,一個被聲明為靜態的變量在這一函數被調用過程中維持其值不變;
2)限制變量的存儲域:<a>在模塊內(但在函數體外),一個被聲明為靜態的變量,可以被模塊內的所有函數訪問,但不能被模塊外其它函數訪問,它是一個本地的局部變量;<b>在模塊內 ,一個被聲明為靜態的函數只能被這一個模塊內的其他函數調用,那就是這個函數被限制在聲明它的模塊的本地范圍內使用。
補充:一個代碼運行時分為4個區:
1)code區:代碼
2)data:全局,靜態,常量 沒賦初值的值默認為0
3)堆:new,malloc分配的內存,需要delete,free釋放;如果不釋放,則只有等到 程序正常運行結束時,由操作系統回收,理論上無限大。
4)棧:場景信息(函數的參數,返回值,局部變量,臨時變量),VC的棧區默認為4M。{例:int n[1024*1024]時會報錯,因為int占四個字節,1024為1M。所以總共占了4M,則系統資源不夠分為,所以報錯} 對大內存的操作,需要放堆區(沒賦初值時值為無窮大)
如: 棧區的空間自動分配自動釋放。
Stedent stu[4*1024*1024] 會出問題,應改為:student *stu=new stu[4*1024*1024] 釋放:delete[] stu;
內存異常:(1)使用非法空間<*p=&a;p=(int *)7;*p=8 將P指針強行指向7這個對象 並賦值為8> (2)系統空間不夠分配