變數位址生命週期的乙個問題

2021-09-14 01:13:16 字數 742 閱讀 6910

面試時經常會考到這樣一道改錯題:

#includeint* function(int parameter)

int a = parameter;

a += 1;

printf("在fuction函式中,變數a的值是%d,  變數a的位址是%d\n", a, &a);

return &a;

int main()

int parameter = 10;

int *p = function(parameter);

printf("指標p的值是%d, p指向的值是%d\n", p, *p);

return 0;

程式原意是在main函式中定義乙個變數 parameter,將其傳遞到函式function中,將parameter賦值給變數a,將a的位址返回給main函式,在main函式再通過a的位址來訪問a的值。先來看程式的執行結果:

從執行結果看出,變數a在function函式中的值是11,且位址是1244900。在main函式中,a的位址還是1244900,但是值卻是4198508!

本道題錯在沒有正確理解變數的生命週期。 在function函式執行完後,變數a的生命週期也隨之結束,即系統會**a的儲存區域,因此這塊儲存區域存什麼,那是系統的事情,我們就不得而知了。有關變數的作用域的詳細情況,一般的教材都會講到,讀者可以參考相關教材。

變數的生命週期

from 今天在論壇上看到有朋友發帖問道 既然靜態全域性變數與全域性變數都儲存在全域性資料區,為什麼作用域卻不一樣呢?也許答案非常簡單 c 就是這麼規定的,靜態全域性變數與全域性變數的唯一區別就是作用域不同。對乙個c 變數來說,有兩個屬性非常重要 作用域和生命週期,它們從兩個不同的維度描述了乙個變數...

變數的生命週期

1 全域性變數 作用域 全域性作用域 只需要在乙個原始檔中定義,就可以作用於所有的原始檔 生命週期 程式執行期一直存在 記憶體分布 全域性 靜態儲存區 注意 如果再兩個檔案中都定義了相同名字的全域性變數,則連線錯誤 變數重定義。2 全域性靜態變數 生命週期 程式執行期一直存在 作用域 檔案作用域 只...

activity生命週期的乙個坑

今天專案中碰到乙個和activity生命週期有關的坑,特此記錄。背景 activity launchmode singleninstance 在多次啟動關閉後,在最後一次關閉 呼叫finish 生命只走到了onpause,此時再次launch後,這兩次的生命週期變成 oncreate onresum...