首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C Primer Plus 學習筆記:第九章 函數

     編輯:關於C語言

第九章 函數

9.1 函數概述

  • 函數是完成特定任務的獨立代碼單元。
  • 使程序模塊化,利於閱讀、修改、維護。
  • 編寫前先明確功能及與整體關系。

9.1.1 函數示例解析

以 starbar() 為例,標識符出現三處:
1. 函數原型:告知編譯器類型。
2. 函數調用:觸發執行。
3. 函數定義:具體實現。
函數同變量有類型,使用前必須聲明。原型以分號結尾區別於定義。原型可置於 main() 前或內部。同文件易編譯,分文件利於復用。函數內變量為局部變量,僅在函數內可見。

9.1.2 帶參函數:形式參數

void show_n_char(char ch, int num) {
    int count;
    for (count = 0; count < num; count++)
        putchar(ch);
}
  • ch、num 為形式參數(形參),屬函數私有的局部變量。
  • 調用時實參值按值傳遞復制給形參,函數內修改不影響實參。
  • return 可返回值,也用於提前結束函數並返回調用處下一語句。

9.1.3 函數類型與聲明

函數聲明必須在使用前。聲明告知類型,定義提供實現。

9.1.4 函數原型的作用

調用時參數壓入棧,被調函數從棧取值。原型讓編譯器檢查參數類型/個數匹配,發現潛在錯誤。

9.2 遞歸

  • C 允許函數調用自身,稱為遞歸。
  • 可替代循環,結構優美,但執行效率通常低於循環(棧開銷)。

9.2.1 遞歸執行流程

每級遞歸擁有私有變量副本。調用地址與返回地址相同。每次調用必有返回。流程:逐級深入 → 到達基準情況 → 逐級返回。
遞歸調用前的語句按調用順序執行;遞歸調用後的語句按返回順序(逆序)執行。代碼不會被復制。必須包含終止條件,否則無限遞歸導致棧溢出。

9.2.2 優缺點

  • 優點:某些問題(如樹遍歷、漢諾塔)遞歸解法最簡潔。
  • 缺點:深度遞歸快速耗盡棧內存。

9.3 多源文件編譯

UNIX (cc)

cc file1.c file2.c        # 生成 a.out
cc file1.c file2.o        # 增量編譯鏈接

Linux (gcc)

gcc file1.c file2.c
gcc file1.c file2.o

Windows (IDE)

  • 面向工程(專案),需將源文件加入工程。
  • 跨文件調用仍需函數原型,常放入頭文件 .h 統一管理。

9.4 指針簡介

  • 指針:值為地址的變量。int *ptr = &pooh; 將 pooh 地址賦給 ptr。ptr 是變量,&pooh 是常量。

9.4.1 間接運算符 *

對指針用 * 可獲取其指向地址存儲的值(解引用)。

9.4.2 地址運算符 &

一元 & 取得變量存儲地址。%p 為輸出地址的格式符。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved