以 starbar() 為例,標識符出現三處:
1. 函數原型:告知編譯器類型。
2. 函數調用:觸發執行。
3. 函數定義:具體實現。
函數同變量有類型,使用前必須聲明。原型以分號結尾區別於定義。原型可置於 main() 前或內部。同文件易編譯,分文件利於復用。函數內變量為局部變量,僅在函數內可見。
void show_n_char(char ch, int num) {
int count;
for (count = 0; count < num; count++)
putchar(ch);
}
ch、num 為形式參數(形參),屬函數私有的局部變量。return 可返回值,也用於提前結束函數並返回調用處下一語句。函數聲明必須在使用前。聲明告知類型,定義提供實現。
調用時參數壓入棧,被調函數從棧取值。原型讓編譯器檢查參數類型/個數匹配,發現潛在錯誤。
每級遞歸擁有私有變量副本。調用地址與返回地址相同。每次調用必有返回。流程:逐級深入 → 到達基準情況 → 逐級返回。
遞歸調用前的語句按調用順序執行;遞歸調用後的語句按返回順序(逆序)執行。代碼不會被復制。必須包含終止條件,否則無限遞歸導致棧溢出。
cc file1.c file2.c # 生成 a.out
cc file1.c file2.o # 增量編譯鏈接
gcc file1.c file2.c
gcc file1.c file2.o
.h 統一管理。int *ptr = &pooh; 將 pooh 地址賦給 ptr。ptr 是變量,&pooh 是常量。*對指針用 * 可獲取其指向地址存儲的值(解引用)。
&一元 & 取得變量存儲地址。%p 為輸出地址的格式符。