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 Plus(第五版)第7章程式設計練習
#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