複習:
自定義函式:
1、函式宣告 告訴編譯器函式的格式,方便它檢查呼叫者的引數、返回值。
2、隱式宣告 當呼叫函式時如果沒有宣告和定義,編譯器會猜測函式的格式,函式的形參按照呼叫者的實參猜測,返回值預設int。
3、函式定義 函式的定義出現在呼叫之前可以省略宣告。
3、函式傳參
值傳遞:普通變數 函式之間不能共享同名變數(區域性)。
址傳遞:陣列的長度會丟失,需要額外增加乙個引數傳遞陣列的長度,同時該陣列會被兩個函式共享(呼叫者和被呼叫者);
返回值:return語句不是給把資料傳遞給呼叫者,而放在乙個他們都能訪問的位置,如果函式中沒有return語句,那麼該位置的值就是乙個隨機的垃圾值(上上次函式的返回值)。
程序映像:
程式:儲存在磁碟上的檔案(二進位制、指令碼)
程序:系統中正在執行的程式,程序映像指的是程序的記憶體分布。
text **段 二進位制指令 常量 唯讀,強制修改會產生段錯誤。
data 資料段 被初始化過的全域性變數、靜態變數。
bss 靜態資料段 未初始化過的全域性變數、靜態變數,該段內存在執行時會先清理為0(全域性變數、靜態變數預設為0)。
heap 堆 由於程式設計師手動管理,特點是夠大。
stack 棧 大小有限超過限制會產生段錯誤,由系統管理,會隨著函式的呼叫分配記憶體,函式執行結束釋放記憶體。
變數的分類:
儲存位置、生命週期、使用範圍
全域性變數:定義函式外
data或bss
從程式執行開始到程式執行結束
任何位置可以使用
區域性變數:定義在函式內
stack
從定義位置開始到函式執行結束
只能在函式內使用
塊變數:定義在if、for、while等語句塊內的
stack
從定義位置開始到函式執行結束
只能在語句塊內使用
全域性變數、區域性變數、塊變數可以重名,區域性變數會螢幕同名的全域性變數,塊變數會螢幕同名的全域性變數、區域性變數。
型別限定符:
auto 用於定義自動分配、釋放記憶體的變數,不加就代表加。
不能在全域性變數前使用,也不能static同時使用。
extern 用於宣告全域性變數
當a.c中定義乙個全域性變數,b.c中如果想使用就需要用extern宣告一下。
extern 宣告只能渡過編譯階段,如果鏈拉時找不到,依然會報錯。
static
限制作用域
全域性變數、函式
改儲存位置
區域性變數、塊變數 由 stack 改為 data或bss
延長生命週期
區域性變數、塊變數 不會被銷毀 它們的初始化語句只是第一次有效。
const
用於"保護"變數不被顯式修改。
初始化過和全域性變數和靜態變數被 const 修飾後儲存位置會變成text,就成為了真正的常量,再強行修改就會產生段錯誤。
volatile
如果變數沒有顯式的被修改,再使用變數時就會繼續使用上次從記憶體中讀取到的值,而不會重新讀取(編譯器的優化)。
有些變數可能會被隱式修改,要想隨時得到變數的最新值就需要用 volatile 修飾乙個。
在硬體程式設計、多執行緒程式設計時使用。
register
申請把變數的儲存位置由記憶體改為暫存器,這樣能提高變數的讀寫速度,從而提高程式執行速度。
由於暫存器數量不多,不是每次申請都能成功。
注意:這種變數不能被取位址。
typedef
型別重定義,當定義變數時,前面加上typedef,變數名就變成了這種型別。
常用的:size_t time_t uint8_t 都是使用typedef重新定義的。
注意:不是替換。
五子棋:
需要的資料:
1、定義棋盤陣列
2、定義變數用於記錄棋子位置
3、定義角色變數
業務邏輯:
是否需要對資料進行初始化
for(;;)
c 語言基礎
三個訪問描述符 public private 和protected 都可以修飾類的資料成員和成員函式 public 可以可以被任何訪問,private 只能被該類的公,私成員函式,該類的友元函式或者友元類的成員函式訪問。protected 只能被該類的公,私成員函式和該類的派生類訪問。c 中除了,和...
c語言基礎
1.問題描述 從鍵盤輸入三個整數,分別存入x,y,z三個整型變數中,計算並輸出三個數的和以及平均值。輸入形式 從鍵盤輸入三個整數,整數之間以空格隔開。輸出形式 在螢幕上分兩行顯示結果 第一行為三個數的和,整數形式輸出 第二行為三個數的平均值,浮點數形式輸出,小數點後保留兩位小數。輸入樣例 3 2 3...
C語言基礎
找最大最小整數 2.問題描述 編寫乙個程式,使用者輸入若干整數,試找出其中的最大數和最小數。輸入形式 使用者在第一行待輸入資料個數,在第二行輸入資料。輸出形式 程式在下一行輸出資料的最大值和最小值 樣例輸入 589 62 96 74 52 樣例輸出 96 52 樣例說明 使用者第一次輸入的為資料個數...