函式的動態(auto)變數是在棧儲存的。棧儲存的變數會在函式結束之後釋放掉。
靜態變數(static)是在資料區儲存,程序結束之後,才會釋放。
一.動態變數
main函式通過呼叫test函式,test函式接收了fun函式區域性變數a的儲存位址,但在接收之前,fun函式已經執行結束了,即區域性變數a已經被釋放掉了,所以test函式再訪問a的時候,會提示段錯誤(編譯時也會有警告)。
#include void test(int *p)
int* fun()
int main()
main函式將區域性變數a的儲存位址傳給test函式,因為在test函式執行時,main函式還未結束,所以test函式能夠正常訪問區域性變數a。
#include void test(int *p)
int main()
二.靜態變數
由於靜態區域性變數a是儲存在資料區,即使fun函式已經結束了,但程序還未結束,所以test函式能夠正常訪問靜態區域性變數a。
#include void test(int *p)
int* fun()
int main()
C語言的坑 函式返回區域性變數
include char tochinese char c return num c 0 num是區域性變數,函式結束時,記憶體釋放,會返回空 int main include include include char tochinese char c char s malloc 5 strcpy ...
C語言 返回區域性變數
一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...
C 語言 區域性變數引用
所謂靜態記憶體分配,就是值我們並沒有鮮明的指明記憶體分配,普通的變數的宣告啦什麼的,都需要記憶體,但是都是由系統自動分配的,所以叫靜態記憶體分配。關鍵點 函式內部的區域性變數,在函式執行完銷毀,之前指向它的指標變得不確定 例如一段程式 void swipe int p 執行結果 p的 999 p的 ...