1樓:匿名使用者
在程式中,只在特定的過程或函式中可以訪問的變數,是相對與全衝純局變數兄雹而言的。
全域性變數也稱為外部變數,是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。全域性變數全部存放在靜態儲存區,在程式開始執行時給全域性變數分配儲存區,程式行完畢就釋放。
區域性變數可以和全域性變數重名,但是區域性變數會遮蔽全域性變數。在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。
上面是摘抄。
區域性變數的特點是:隨函式呼叫時建立 隨函式結束時析構(銷燬)設想 如果返回了乙個區域性變數的指標。
而恰好 區域性變數偏偏又在函式散塵咐結束後銷燬。
但指標並沒有被銷燬 而是被返回。
那也就是說 指標指向的 正是乙個被銷燬了的物件。
2樓:匿名使用者
就好比你的指標指向了一塊塌桐含蛋糕。
蛋糕在函式進入時輪漏被做出來了。
結果呢 蛋糕偏偏又在函式結束時被吃掉了。
可它又把指向那個已經成了空蛋糕的指標給了你。
你說 你還團笑能再吃嗎?^_
c++函式返回區域性變數位址,在main中解析改位址的值為什麼會有不同的情況?
3樓:網友
區域性變數是在棧中分配的,進入區域性函式時,函式會將自己使用的區域性變數位址使用 `棧位址+偏移`來表示,如果函式退出,外層函式剛好沒有使用這個位址時,資料則還在該位址中,但一般會被破壞,所以,如果返回引用,編譯器能識別且不允許編譯通過,但如果強行返回乙個位址值雖能騙過編譯器,但用法是錯的。
要弄清楚變數的作用範圍。
預瞭解原理,需要補習 編譯器原理、過程呼叫規則、作業系統原理。
4樓:網友
我給你從編譯器角度考慮下吧!
1、首先區域性變數的使用範圍只有在這個區域性範圍類有效。
2、函式是模組化的思想。比如你有乙個判斷乙個數是否是素數的函式。那麼你再求100以內所有素數和的時候,main中會呼叫這個函式100次。
這些函式編譯器在處理的時候都是放在乙個堆疊的。而且每個函式都佔有不同的位址和空間。(遞迴函式尤為明顯)。
最關鍵的是,當函式返回函式值後,函式的使命就結束了。所以這個函式體在呢記憶體中就銷燬了。你即使能從函式中返回乙個區域性變數。
你再去讀這個位址的時候。東西都不在了。
3、還有一點。編譯器在分配函式的空間的時候,位址不是固定的。所以你每次執行程式,你會發現 int a=3 printf(f"%d",&a),不都是一樣的。所以你的問題很明瞭了。
5樓:網友
因為函式內區域性變數的位址在函式執行完畢後就被釋放了,不能再對其進行操作拉。
c語言中,為什麼在64位系統中long跟指標的大小是8,而
64位系統,這個位數指的是cpu 裡面的通用暫存器的資料寬度為64位,也就是說一個地址佔二進位制位數是64,所以sizeof double sizeof int sizeof char 64 8 8 32位系統,同理,他的一個地址佔32位二進位制空間,sizeof double sizeof int...
C語言中,字串為什麼不能直接用等於號賦值給變數。例如int a a「bcd」
等號當然可以用賦值,賦值就是把等號左邊值的賦給右邊,之所以你寫的不對是因為你版 的資料權型別不對。a是int型,即整數型的,例如 你可以讓 a 3 意思是把3賦給a,但不能讓乙個字串賦給a,所以你那樣賦值肯定會報錯。c語言沒有專門用於儲存字串的變數型別,字串都是被儲存在char型別的陣列中。可以把所...
在c語言中dcf都是什麼意思請詳細的說一
printf函式呼叫的一般形式 printf函式是乙個標準庫函式,它的函 數原型在標頭檔案 stdio.h 中。但作為乙個特例,不要求在使用 printf 函式之前必須包含stdio.h檔案。printf函式呼叫的一般形式為 printf 格式控制字串 輸出表列 其中格式控制字串用於指定輸出格式。格...