大一匆匆結束了。 作為一名軟體工程的學生,大一就接觸學習了c/c++。 總體來說,學的還是不夠細,不夠透。
暑假,藉此機會,重新啃啃這兩門語言,寫寫部落格,方便以後自己溫習,也希望,能和大家一起交流分享。
下面的內容, 主要來自《大學生程式設計課程與acm競賽實訓教材》,一些大牛的部落格,還有就是得學習心得。
話不多說,上**。
變數除了型別屬性(int ,char ,float....)外,另外乙個重要屬性就是儲存類別
系統把程式中用到的資料區分為靜態儲存區和動態儲存區。
靜態儲存區:在這個區分配了空間的變數,在程式執行過程中一直存在,即相對是不變的。
動態儲存區:在這個區分配了空間的變數,可能隨時被釋放,即相對是不斷變化的。
c語言提供了儲存類別說明符包括:auto(自動的),static(靜態的),register(寄存的),extern(外部的)
語法格式: [儲存類別說明符] 型別說明符 變數; 如: static int a;
在定義變數時,儲存類別說明符可以省略,預設情況下是auto,系統會根據變數是區域性變數還是全域性變數自行分配。
其中,全域性-------靜態儲存區 區域性---------------動態儲存區。
ps:解釋下全域性變數和區域性變數
全域性變數: 全域性變數也稱為外部變數,它是在函式外部定義的變數。它不屬於哪乙個函式,它屬於乙個源程式檔案。其作用域是整個源程式。在函式中使用全域性變數,一般應作全域性變數說明。只有在函式內經過說明的全域性變數才能使用。全域性變數的說明符為extern。但在乙個函式之前定義的全域性變數,在該函式內使用可不再加以說明。
int main()
printf("%d\n",k);
return 0;
}
執行結果: 8
本程式在main中定義了i,j,k三個變數,其中k未賦初值。而在復合語句內又定義了乙個變數k,並賦初值為8。應該注意這兩個k不是同乙個變數。在復合語句外由main定義的k起作用,而在復合語句內則由在復合語句內定義的k起作用。因此程式第4行的k為main所定義,其值應為5。第7行輸出k值,該行在復合語句內,由復合語句內定義的k起作用,其初值為8,故輸出值為8,第9行輸出i,k值。i是在整個程式中有效的,第7行對i賦值為3,故以輸出也為3。而第9行已在復合語句之外,輸出的k應為main所定義的k,此k值由第4 行已獲得為5,故輸出也為5。
注:如果同乙個原始檔中,外部變數與區域性變數同名,則在區域性變數的作用範圍內,外部變數被遮蔽,即它不起作用。
當然,我們也可以改變變數的儲存區,即人為的設定。
注意,全域性變數一定是在靜態儲存區分配空間,這點不能改變。(全域性變數在程式執行過程中自始至終都存在)
至於區域性變數,它可以在動態區,也可以在靜態區。
下面舉例說明區域性靜態變數。
#include #include int func( void )
int main()
}
輸出為: 1 2 3 4 5
在函式func第一次被呼叫的時候,系統為靜態區域性變數c在靜態區分配空間,並賦初值0,函式執行後c變為1,當函式返回時,變數c的空間並不釋放,依舊保持在靜態區,並且保留現有資料值1,當函式再次被呼叫時,不再為c重新分配空間,還是利用原有c,所以執行+1操作後,c變成2.,如此進行。
現在談談靜態全域性變數。 之前提過,全域性變數一定是在靜態儲存區分配空間,而這裡的static,不是說明全域性變數在哪個儲存區分配空間,而是用來限制變數作用域的。
這就關聯到了我們要談的extern,當在編寫較大程式時,往往將**分成不同的幾個原始檔分別儲存,這樣就得利用到extern來訪問其他原始檔中的變數。
如果在乙個原始檔中定義的全域性變數不允許其他檔案中的**使用,則將變數定義成靜態全域性變數,即使在其他檔案中使用了extern宣告也無法使用。
例如:
int a;
static int b; //靜態全域性變數
main()
extern int a; // 說明後可以引用
extern int b; //說明後也無法引用
func()
最後說明下register,register定義的變數,是將變數儲存在cpu的內部暫存器中,從而避免每次的記憶體訪問,以達到提高效率的目的。所以,一般是在**量小的,經常使用的進行特殊宣告。 不過實際上,暫存器是十分有限的,並且受到資料型別的限制,還有並不是所有的編譯器都能實現這一功能,所以具體使用比較少。
今天就先寫這些,主要介紹了4種變數的儲存類別, 希望,能給大家帶來一些幫助。
水平有限,如有錯誤,歡迎指正。
C語言 重溫C語言
練習 提取碼 4pzi int zippo 5 陣列zippo 5 的首元素為zippo 0 include void test int b intmain printf 實參陣列a大小 d位元組 n sizeof a 實參陣列a大小 20位元組 test a return0 int a 5 int...
c語言重溫筆記 2 資料型別
今天談談資料型別,算是比較基礎的問題,至於具體的內容,詳見 裡面介紹的挺全面的,我也就不多說明了。下面講講幾點常見錯誤。include include void main 看下輸出結果。發現判斷語句列印了 這句。這確實有點有違常理,明明運算後結果一樣,但是比較後就是不一樣。再看最後乙個printf語...
C語言重溫基礎排序演算法
自從學習c語言開始,就知道個舉世聞名的十大排序演算法,今天大師匈重溫了一下最簡單的,一種是最蠢的,一種是冒泡 也非常簡單 後續繼續寫出來其他的排序演算法。上 int main printf d array i if i bytes num 1 for i 0 i bytes num i 最蠢的排序 ...