c語言區域性變數應該注意什麼?

2021-08-31 18:23:25 字數 873 閱讀 6839

int liv_width
其變數名解釋如下:

l:區域性變數(local)(其它:g 全域性變數(global))

i : 資料型別(interger)

v 變數(variable)(其它:c 常量(const)…)

width 變數含義

這麼做的方法好處之一就是避免了與全域性變數混淆,不過我覺得這個不適合模組化思想,我看了一些linux原始碼和uboot原始碼,區域性變數大部分還是命名為"變數含義」+「_」+「模組名(或函式名)」

二、static和記憶體

static區域性變數是要和記憶體一起說的:

普通的區域性變數在棧空間上分配,這個區域性變數所在的函式被多次呼叫時,每次呼叫這個區域性變數在棧上的位置都不一定相同。區域性變數也可以在堆上動態分配(malloc),但是記得使用完這個堆空間後要釋放之。

在棧空間上分配時是要注意記憶體的,不能分配記憶體過大。如果棧內空間小於所申請的空間大小,那麼這時系統將揭示棧溢位,並給出相應的異常 資訊 。但是堆不一樣,堆可分配空間是很大的。

static區域性變數中文名叫靜態區域性變數。普通區域性變數是在動態儲存區的(堆疊區),但是靜態區域性變數是在靜態儲存區的(和全域性變數在乙個地方,可以當全域性變數使用)

它與普通的區域性變數比起來有如下幾個區別:

1)位置:靜態區域性變數被編譯器放在全域性儲存區.data,所以它雖然是區域性的,但是在程式的整個生命週期中存在(定義時出生,隨著程式結束而結束)。

2)訪問許可權:靜態區域性變數只能被其作用域內的變數或函式訪問。也就是說雖然它會在程式的整個生命週期中存在,由於它是static的,它不能被其他的函式和原始檔訪問。

3)值:靜態區域性變數如果沒有被使用者初始化,則會被編譯器自動賦值為0,以後每次呼叫靜態區域性變數的時候都用上次呼叫後的值。

C語言 返回區域性變數

一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...

C 語言 區域性變數引用

所謂靜態記憶體分配,就是值我們並沒有鮮明的指明記憶體分配,普通的變數的宣告啦什麼的,都需要記憶體,但是都是由系統自動分配的,所以叫靜態記憶體分配。關鍵點 函式內部的區域性變數,在函式執行完銷毀,之前指向它的指標變得不確定 例如一段程式 void swipe int p 執行結果 p的 999 p的 ...

c語言臆想 全域性 區域性變數

data段在編譯時就已確定大小,在程式一執行就分配空間 棧中的資料在執行時才分配空間。首先型別 靜態變數 都不再棧中管理,編譯時在靜態儲存區分配空間。非靜態變數 除全域性變數外,都在棧中管理,執行時分配記憶體。作用域 全域性變數 都不再棧中管理,編譯時在靜態儲存區分配空間。在程式執行結束前都有效。區...