C語言基礎(2)

2021-10-01 01:31:11 字數 1441 閱讀 9006

讓我們來看一段**,

int

add(a, b)

intmain()

這個**列印出來的結果到底是什麼樣子的呢?

這裡列印出來的a的值到底是多少呢?110?10?

在這裡我們要引出來兩個概念。

棧 棧幀

(1)什麼是棧呢?

這個概念可能沒有學習資料結構的人可能了解不太多。棧是一種只能在一段插入和刪除的操作的特殊線性表。他按照先進後出的原則儲存資料,先進入的資料被壓在棧底,最後的資料在棧頂。需要讀資料的時候從棧頂彈出乙個資料。

(2)什麼又是棧幀呢?

棧幀表示程式的函式的呼叫記錄,而棧幀又是記錄在棧上面。通俗的說,乙個棧分了n個記錄塊,每乙個記錄塊就是乙個棧幀。乙個棧1兆空間,而乙個棧幀大概88個位元組,這個是根據編譯器的與不同來決定的。

那麼函式在執行時,棧幀是如何記錄的呢?

根據上面的**,我們來看一下這個圖,根據圖來理解。.

首先呢,先執行了main函式,為他分配了乙個棧幀,緊接著在main函式裡面又呼叫了add函式,在add函式裡面實現了a+b,將他倆的和返回給,main函式裡面的c ,此時,add函式占用的棧幀就釋放了,所以a還是列印的是10 而不是110.

**break continue goto return 的區別 **

break: 在for迴圈中,跳到表示式三在繼續開始執行。在do while 和while中,結束迴圈,執行迴圈後面的語句。一般都會與if語句配合使用,當滿足某個條件時 跳出迴圈在開關語句中,可以使程式跳出switch,繼續執行switch之後的語句,如果沒有break語句,它將成為乙個死迴圈無法退出。

return:return並不是專門跳出迴圈的,它是用來結束乙個方法,一旦在迴圈體內遇到return,他就會結束這個方法,當然,迴圈也就自然而然的結束了。
與break,continue 不同的是,return不論位於多少層迴圈之內,他都直接結束這個方法。

再來說一說goto:

goto語句也稱為無條件轉移語句,其一般格式如下: goto 語句標號; 其中語句標號是按識別符號規定書寫的符號, 放在某一語句行的前面,標號後加冒號(?。語句標號起標識語句的作用,與goto 語句配合使用。

如: label: i++;

loop: while(x<7);

goto:loop

c語言不限制程式中使用標號的次數,但各標號不得重名。goto語句的語義是改變程式流向, 轉去執行語句標號所標識的語句。

goto語句通常與條件語句配合使用。可用來實現條件轉移, 構成迴圈,跳出迴圈體等功能。

但是,在結構化程式設計中一般不主張使用goto語句, 以免造成程式流程的混亂,使理解和除錯程式都產生困難。

C語言基礎 2

1.正數的反碼,補碼都等於原碼 負數的補碼等於反碼加一。例 31的補碼 1 原碼 1001 1111 2 反碼 1110 0000 3 補碼 1110 0001 2.計算機中儲存資料用補碼主要是因為 0這個數的原碼和反碼不唯一,出現了bug,而 0補碼是一致的。3.字串以 0 結尾。字元常量 x 字...

c語言基礎2

陣列 定義 型別說明符 陣列名 常量表示式 例如int a 10 陣列中十個元素位元組位址是連續的,10代表陣列的長度,0 9是陣列的下標 在陣列的位址中,由a 0 到a 9 中位址是從低位址到高位址。求陣列中元素的個數大多使用 sizeof a sizeof a 0 關於陣列位址的問題 a 0 代...

C語言基礎 2

一 編譯步驟 預處理 e 編譯 c 彙編 s 鏈結二 資料型別 32bit 系統 基本資料型別 整型 int 4 short 2 long 4 字元型 char 1 浮點型 float 4 double 8 列舉型 enum 構造資料型別 struct union 陣列型別 指標型別 void型 1...