C語言重要知識點總結(一)

2021-07-05 21:41:21 字數 2395 閱讀 9963

最近重新看了下c語言,發現先前學習的時候很多的重點都被忽略了,現在回頭看發現了很多以前沒有注意的東西,所以寫部落格記錄下,方便以後可以參考查詢。

變數的儲存類別

c語言中變數的儲存類別有auto,register,extern和static。下面將對以下四個儲存類別進行詳細的介紹:

auto:自動變數,預設的儲存型別,根據變數定義的位置決定變數的生命週期和作用域。如果定義在任何乙個函式的外面則編譯器將改變量定為全域性變數。如果定義在函式裡面,則編譯器則會將改變量識別為區域性變數。

register:暫存器變數,這個類別的變數會被優先分配到暫存器。通常作為迴圈因子的變數會被分配到暫存器。

extern:外部變數(全域性變數),該關鍵字用來擴充套件全域性變數的作用域。擴充套件的範圍是從使用extern變數開始到改檔案結尾。extern關鍵字所做的工作只是讓其他檔案中的程式可以引用該變數,並不會改變這個變數的生命週期。extern修飾的一定是全域性變數,修飾區域性變數沒有意義。

static靜態變數,以前以為用static修飾的變數是存放在堆中的,現在覺得不是。static是用於限制作用域的,被static修飾的變數儲存在資料段中,無論static修飾的是全域性變數還是區域性變數都是被存放在資料段中的。被static修飾的變數可以細分為static全域性變數和static區域性變數。下面對分別對static全域性變數和static區域性變數從作用域和生命週期進行總結:

staitc變數

作用域生命週期

staitc全域性變數

只作用於本檔案,也就是說只有本檔案的函式可以引用改全域性變數。

在整個程式執行過程中該變數一直存在。

staitc區域性變數

作用域和普通的區域性變數一樣,只能作用在其所定義的復合語句中,也就是其他函式不可訪問。

在整個程式執行過程中該變數一直存在,因為不是存放在棧中而是存放在資料段內。

正是被static修飾的變數有如上的特性,所以static變數在c語言中有乙個很顯著的作用就是可以實現乙個模組的封裝。在c語言中乙個源程式檔案就是乙個模組,由於被static宣告的全域性變數只能被本檔案的函式訪問,所以當使用者在乙個檔案中定義乙個static全域性變數後,其他檔案(模組)只能通過該模組提供的介面函式來訪問這個static變數,而不能直接對其進行操作。

2. 陣列指標和指標陣列

這兩個概念是我自己總結,其實自己也有點迷糊。陣列指標是指數組的指標,而指標陣列是指指標的陣列。

指標陣列:指標的陣列好理解,就是存放指標的陣列,在c語言中定義如下:

int

*p[10];

該定義指定了乙個存放10個指向int的指標的陣列。

陣列指標:陣列的指標,顧名思義,就是指指向乙個陣列的指標。在c語言中的定義如

int (*p)[10];
乙個指標,指向乙個陣列物件,該陣列是乙個擁有10個整型元素的陣列。

注意:當執行p+1是,p移動的位元組數不是int的位元組數,而是整個陣列的位元組數。如上面的定義,當執行p+1時,移動的是sizeof(int)*10=40個位元組。

3. 記憶體對齊

為了高速的處理資料,現代處理器的設計引入了對齊的概念。所謂對齊就是保證資料在記憶體中的儲存時位址變化按照一定的規律,主要目的是保證cpu每次都可以取同樣長度的資料進行運算,因此可以提高計算機執行的速度。是一種用空間換時間的策略。

struct test1
在32位體系結構中定義如上的結構體。用sizeof()測試上面結構體的大小的結果是8位元組

struct test2
在32位體系結構中定義如上的結構體。用sizeof()測試上面結構體的大小的結果是12位元組

出現上面的現象就是由於記憶體對齊。在32位體系結構中預設採用4位元組的對齊方式。也就是說cpu一次讀取位元組的大小為4個位元組。當只有乙個字元變數的時候,第乙個位元組儲存字元變數的值,剩下的3個用空白值填充。當對於結構體test1中的情況是將字元型變數ch和短整型變數儲存在乙個4位元組的記憶體區域,多出的乙個位元組用無用值填充。所以測試的結果是8位元組。用圖形表示如下:

c語言重要知識點1

在c語言語言裡面比較重要的知識點有函式 指標 變數 函式 在函式這乙個知識點裡面需要注意的是 1 函式表示式的正確規範的表達形式 void display int num,char p,a,void link int date 等類似的形式 但是其中最主要的有一點需要記住那就是 函式的形參和返回值一...

00 C語言重要知識點複習

c語言重要知識點複習 1,自加自減運算 單目運算 說明 1 運算物件只能是乙個變數 2 error 2 前置是先運算,後引用,而後置是先引用後運算 int i,x i 5 x i x i i i 1 i 5 x i i i 1 x i 2,運算的優先順序 1 第一原則 單目運算的優先順序高於雙目運算...

C語言重要知識點回顧

太久沒有看c語言相關知識了,開始要整理回顧一些重點知識點啦,因為各大公司筆試還是有許多c語言相關的題,做個複習。普通指標使用 普通指標使用,我們通過 i 或者 p 指標都能改變變數值 void test1 輸出結果 這個結果是我們好理解的。接著 const int p 問題 const int p ...