c語言重溫筆記(1)

2021-06-16 14:18:01 字數 2516 閱讀 7110

大一匆匆結束了。 作為一名軟體工程的學生,大一就接觸學習了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 最蠢的排序 ...