1. 程式人生 > >C Primer Plus (第五版)中文版——第 9 章 函式

C Primer Plus (第五版)中文版——第 9 章 函式

9.1  函式描述

  • 函式(function)是用於完成特定任務的程式程式碼的自包含單元。一個簡單函式:
/* lesser.c -- finds the lesser of two evils */
#include <stdio.h>
int imin(int n,int m);  /* prototype the function */

int main(void)
{
    int evil1, evil2;

    printf("Enter a pair of integers (q to quit):\n");
    while (scanf("%d %d", &evil1, &evil2) == 2)
    {
        printf("The lesser of %d and %d is %d.\n",
            evil1, evil2, imin(evil1,evil2));    /* use the function */
        printf("Enter a pair of integers (q to quit):\n");
    }
    printf("Bye.\n");
  
    return 0;
}

int imin(int n,int m)
{
    int min;

    if (n < m)
        min = n;
    else
        min = m;
  
    return min;
}

程式分析:imin 識別符號在不同位置出現了三次:

  • 函式原型(function prototype)告知編譯器 imin() 的函式型別。
  • 函式呼叫(function call)導致 imin() 函式的執行。
  • 函式定義(function definition)確切指定 imin() 函式的具體功能。

一、原型宣告

  • 使用函式前需要用 ANSI 原型宣告該函式。函式原型宣告返回值型別、引數個數及各引數的型別。
int imin(int n,int m);   /* prototype the function */
/* 使用逗號分隔的型別列表指明引數的個數和型別 */

int imin(int, int);      /* prototype the function */
/* 可以根據個人喜好省略變數名 */

二、函式呼叫

  • 函式呼叫導致該函式的執行:
imin(evil1,evil2);   /* use the function */
  • evil1 和 evil2 被稱為實際引數。實際引數可以是常量、變數或表示式。

三、函式定義

  • 函式定義以 ANSI C 函式頭開始,且ANSI C 要求在每個變數前宣告其型別:
int imin(int n,int m)
  • 變數 n 和 m 被稱為形式參量。形式參量是區域性變數,與其他函式中的變數(即使同名)相互獨立、互不影響。

四、使用 return 從函式中返回一個值

  • 在一個具有返回值的函式中,關鍵字 return 指明瞭其後的表示式即是該函式的返回值。
  • return 語句的另一作用是終止執行函式,並把控制返回給呼叫函式的下一語句,即使 return 語句不是函式的最後一個語句。
  • 許多 C 程式設計師更傾向於只在函式結尾使用一次 return 語句。

9.3  遞迴

C 允許一個函式呼叫其本身。這種呼叫過程被稱作遞迴(recursion)。

  • 優點:在某些程式設計問題上,遞迴提供了最簡單的解決方法。
  • 缺點:一些遞迴演算法會很快耗盡計算機的記憶體資源;遞迴的程式難於閱讀和維護。

9.4  多原始碼檔案程式的編譯

  • 在 Windows 系統下的編譯器是面向工程的。工程(project)描述了一個特定的程式所使用的資源。這些資源包括原始碼檔案。使用這種編譯器執行單檔案程式時,必須建立工程。而對於多檔案程式,需要將原始碼檔案加入到一個工程之中,且工程必須包括所有的原始碼檔案(.c 檔案),但標頭檔案(.h 檔案)不能包含在工程之中。因為工程只管理所使用的原始碼檔案,而使用哪些標頭檔案需要由原始碼檔案中的 #include 指令確定。
  • 把函式原型和常量定義放在一個頭檔案中是一個和好的變成習慣。

9.5  地址運算子:&

  • 一元地址運算子 & 可以取得變數的儲存地址。變數的地址可以看作是該變數在記憶體中的位置。
/* 假設 pooh 是一個變數名,那麼 &pooh 就是該變數的地址. */
/* 假定 pooh 賦值為24,pooh 的儲存地址是0B76,那麼語句: */
pooh = 24;
printf("%d %p", pooh, &pooh);
/* 將輸出如下數值(%p 是輸出地址的說明符):            */
24 0B76

9.7  指標簡介

  • 指標是一個其數值為地址的變數(更一般地說是一個數據物件)。
  • 普通的變數把它的數值作為基本數值量,而通過使用地址運算子&將它的地址作為間接數值量。
  • 對指標來說,它把地址作為基本數值量,而通過使用間接運算子*將地址中儲存的數值作為間接數值量。
/* 若某個指標變數名為ptr */
ptr = & pooh;    /* 把pooh的地址賦給ptr,注意&pooh是一個常量,而ptr是一個變數 */
  • 間接運算子:*
/* 若某個指標變數名為ptr */
ptr = & pooh;    /* 把pooh的地址賦給ptr,注意&pooh是一個常量,而ptr是一個變數 */
val = * ptr;     /* 使用間接運算子*來獲取pooh中存放的數值 */
  • 指標宣告
int * pi;    /* 型別識別符號表明了被指向變數的型別,星號(*)表明變數pi為一指標 */
  • 使用指標在函式間通訊:使用函式交換 x 和 y 的值。
/* swap3.c -- using pointers to make swapping work */
#include <stdio.h>
void interchange(int * u, int * v);

int main(void)
{
    int x = 5, y = 10;

    printf("Originally x = %d and y = %d.\n", x, y);
    interchange(&x, &y);  /* send addresses to function  */
    printf("Now x = %d and y = %d.\n", x, y);

    return 0;
}

void interchange(int * u, int * v)    /* u的值為&x,*u代表x的值 */
{
    int temp;

    temp = *u;       /* temp gets value that u points to */
    *u = *v;
    *v = temp;
}

相關推薦

C Primer Plus ()中文版—— 4 字串和格式化輸入輸出

4.1  前導程式 #include <stdio.h> #include <string.h> /*提供strlen() 函式原型*/ #define PRAISE "You are my sunshine!!!" int main(void

C Primer Plus ()中文版—— 13 檔案輸入/輸出

13.1  和檔案進行通訊 13.1.1  檔案是什麼 一個檔案(file)通常就是磁碟上的一段命名的儲存區。C 將檔案看成是連續的位元組序列,其中沒一個位元組單獨地讀取。ANSI C 提供了檔案的兩種檢視:文字檢視、二進位制檢視。 13.1.2  文字檢視

C Primer Plus ()中文版—— 12 儲存類、連結和記憶體管理

12.1  儲存類 12.1.1  作用域 定義:作用域描述了程式中可以訪問一個識別符號的一個或多個區域。 分類: 程式碼塊作用域:在程式碼塊中定義的變數具有程式碼塊作用域,從定義處到包含該定義的程式碼塊的末尾,該變數可見。 函式原型作用域:在函式原型

C Primer Plus ()中文版—— 11 字串和字串函式

11.1  字串表示和字串 I/O 11.1  在程式中定義字串 一、字串常量 字串常量(string constant)又稱字串文字(string literal),是指位於一對雙引號中的任何字元。字串常量屬於靜態儲存類。 可以用 #define 來定義字串常量

C Primer Plus ()中文版—— 10 陣列和指標

10.1  陣列 陣列(array)由一系列型別相同的元素構成。陣列宣告(array declaration)中包括陣列元素的數目和元素的型別。如: int month[12]; /* 12個整數的陣列 */ /* int 是陣列中

C Primer Plus ()中文版—— 9 函式

9.1  函式描述 函式(function)是用於完成特定任務的程式程式碼的自包含單元。一個簡單函式: /* lesser.c -- finds the lesser of two evils */ #include <stdio.h> int imin(in

C Primer Plus ()中文版—— 8 字元輸入/輸出和輸入確認

8.1  單字元 I/O:getchar() 和 putchar() getchar() 和 putchar() 每次輸入和輸出一個字元。一個輸入回顯例子: /*使用一個while迴圈,該迴圈在遇到#時終止*/ int main(void) { char ch; while

C Primer Plus ()中文版—— 9 函式

9.1  函式描述 函式(function)是用於完成特定任務的程式程式碼的自包含單元。一個簡單函式: /* lesser.c -- finds the lesser of two evils */ #include <stdio.h> int imin(int

C Primer Plus ()中文版—— 8 字元輸入/輸出和輸入確認

8.1  單字元 I/O:getchar() 和 putchar() getchar() 和 putchar() 每次輸入和輸出一個字元。一個輸入回顯例子: /*使用一個while迴圈,該迴圈在遇到#時終止*/ int main(void) { char ch; w

C Primer Plus ()中文版—— 7 C 控制語句:分支和跳轉

7.1 if 語句 if 語句被稱為分支語句(branching statement)或選擇語句(selection statement),它提供了一個交匯點,在此處程式需要選擇兩條分支的一條前進。其一般形式為: if(expression) statement

C Primer Plus ()中文版—— 4 字串和格式化輸入輸出

4.1  前導程式 #include <stdio.h> #include <string.h> /*提供strlen() 函式原型*/ #define PRAISE "You are my sunshine!!!" int mai

c++ primer plus(6)中文版 程式設計練習答案

第五章程式設計練習答案 5.1輸入2個整數,輸出這2個之間(包括這兩個)所有整數和 //5.1輸入2個整數,輸出這2個之間(包括這兩個)所有整數和 #include <iostream> using namespace std; int main () {

C++ Primer Plus7程式設計練習

#include<iostream> int in(double scores[]); void out(const double scores[], int n); double average(const double scores[], int n);

C++ primer(4習題答案

第四章 表示式 4.1  105 4.2 (a) *(vec.begin())      (b) (*(vec.begin())) + 1 4.3 是的,我認為有必要進行權衡。因為速度永遠是C++最大的優勢。有時,我們需要編譯器的特性來進行高效的工作。但如

c++ primer 學習筆記-第二 變數和基本型別

本文為轉載,出處:https://blog.csdn.net/libin1105/article/details/48157115                              https://blog.csdn.net/sunhero2010/article/d

C++ Primer 讀書筆記 第一 開始

下面是C++ Primer第一章的讀書筆記 ———————————————————————— 0001.作業系統如何執行C++程式 作業系統通過呼叫main來執行C++程式 0002.main 作業系統執行一個C++程式時所呼叫的函式 每個程式必須有且只有一個命名為mai

C++Primer 習題答案 第二 變數和基本型別(variables and basic types)

2.1 C++語言規定一個int至少和一個short一樣大,一個long至少和一個int一樣大,一個long long至少和一個long一樣大。每個的最小尺寸分別為:short,16位;int,16位;long,32位;long long,64位。 除去布林

讀書筆記-Python科學程式設計入門(A Primer on Scientific Programming with Python)()-

第四章-使用者輸入與錯誤處理(User Input and Error Handling) Python 輸入資料的方法: 從終端視窗(Terminal Window)輸入 (4.1 節) 從命令列(Command Line)輸入 (4.2 節) 從檔案(File

讀書筆記:LearningPython 如何執行程式)

Chap3 How You Run Programs 3.1 互動式提示符 3.1.1 執行互動式環境 3.1.2 Windows新的 啟動 從Python 3.3 開始,Windows平臺上多了py 和 pyw2個啟動程式的方式: c:\code> p

讀書筆記:LearningPython 數字型別)

Chap5 數字型別 5.1 數字型別基礎 Python支援基本的數字型別,以及更高階的物件,用來處理高階工作: integer 和 float 物件 complex number 物件 decimal : 固定精度物件 fraction : fracti