關於靜態變數的問題 Devin 新浪部落格

2021-10-10 12:14:36 字數 485 閱讀 7200

下面以乙個例子簡單的分析一下,分析不全面。

#include

void *getmemory()

void test()

void main()

以上程式是完成列印「hello world」字串的功能。  

*getmemory()函式通過返回str指標到test中, test接收到以後將字串列印出來。

問題:如果函式*getmemory()中如果str被定義成了static靜態變數。而如果該函式如下:

void *getmemory()

則整個函式的功能無法實現。

分析原因:

函式在定義並執行的過程中,作業系統會為其開闢一些記憶體空間,而其中的變數是存放在該函式的棧上,當該函式執行完以後,該段空間和棧將會被釋放掉。相反,如果使用static靜態變數的定義方式,該變數將會被存放在靜態的儲存區上,函式執行完以後並不會立即釋放掉這些變數空間,所以後面的函式仍然可以訪問到該變數。

關於靜態變數

靜態變數的型別關鍵字是static,其包括靜態全域性變數和靜態區域性變數。靜態區域性變數的作用域是區域性的,即存在於乙個檔案或者乙個函式中,而靜態全域性變數則存在於整個函式中,即當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。靜態區域性變數和動態區域性變數 3 4 5 6...

關於靜態變數

對於函式來說,定義與宣告很容易區別,但對於變數來說則不是,為了辨明,試驗了一下幾段 include using namespace std class test2 int test2 i int main int argc,const char argv 這段 可以通過 此時主函式中未使用類test...

關於靜態變數的繼承

父類 package test public class father 子類1 package test public class son1 extends father 子類2 package test public class son2 extends father 測試 package tes...