
- C語言程式設計教程
- C語言——主頁
- C語言基礎
- C語言——概述
- C語言——特性
- C語言——歷史
- C語言——環境搭建
- C語言——程式結構
- C語言——Hello World
- C語言——編譯過程
- C語言——註釋
- C語言——記號
- C語言——關鍵字
- C語言——識別符號
- C語言——使用者輸入
- C語言——基本語法
- C語言——資料型別
- C語言——變數
- C語言——整數提升
- C語言——型別轉換
- C語言——型別轉換
- C語言——布林值
- C語言中的常量和字面量
- C語言——常量
- C語言——字面量
- C語言——跳脫字元
- C語言——格式說明符
- C語言中的運算子
- C語言——運算子
- C語言——算數運算子
- C語言——關係運算符
- C語言——邏輯運算子
- C語言——位運算子
- C語言——賦值運算子
- C語言——一元運算子
- C語言——自增和自減運算子
- C語言——三元運算子
- C語言——sizeof運算子
- C語言——運算子優先順序
- C語言——其他運算子
- C語言中的決策
- C語言——決策
- C語言——if語句
- C語言——if...else語句
- C語言——巢狀if語句
- C語言——switch語句
- C語言——巢狀switch語句
- C語言中的迴圈
- C語言——迴圈
- C語言——while迴圈
- C語言——for迴圈
- C語言——do...while迴圈
- C語言——巢狀迴圈
- C語言——無限迴圈
- C語言——break語句
- C語言——continue語句
- C語言——goto語句
- C語言中的函式
- C語言——函式
- C語言——main函式
- C語言——按值呼叫函式
- C語言——引用呼叫函式
- C語言——巢狀函式
- C語言——可變引數函式
- C語言——使用者自定義函式
- C語言——回撥函式
- C語言——return語句
- C語言——遞迴
- C語言中的作用域規則
- C語言——作用域規則
- C語言——靜態變數
- C語言——全域性變數
- C語言中的陣列
- C語言——陣列
- C語言——陣列的屬性
- C語言——多維陣列
- C語言——將陣列傳遞給函式
- C語言——從函式返回陣列
- C語言——可變長度陣列
- C語言中的指標
- C語言——指標
- C語言——指標和陣列
- C語言——指標的應用
- C語言——指標算術
- C語言——指標陣列
- C語言——指標指向指標
- C語言——將指標傳遞給函式
- C語言——從函式返回指標
- C語言——函式指標
- C語言——指向陣列的指標
- C語言——指向結構的指標
- C語言——指標鏈
- C語言——指標與陣列
- C語言——字元指標和函式
- C語言——NULL指標
- C語言——void指標
- C語言——懸垂指標
- C語言——取消指標指向
- C語言——近指標,遠指標和巨指標
- C語言——指標陣列初始化
- C語言——指標與多維陣列
- C語言中的字串
- C語言——字串
- C語言——字串陣列
- C語言——特殊字元
- C語言結構和聯合
- C語言——結構
- C語言——結構和函式
- C語言——結構的陣列
- C語言——自引用結構
- C語言——查表
- C語言——點(.)運算子
- C語言——列舉(或enum)
- C語言——結構填充和打包
- C語言——巢狀結構
- C語言——匿名結構和聯合
- C語言——聯合
- C - 位欄位
- C - 型別定義
- C 中的檔案處理
- C - 輸入與輸出
- C - 檔案 I/O(檔案處理)
- C 預處理器
- C - 預處理器
- C - 指示
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C 中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C 程式設計資源
- C - 問題與解答
- C - 快速指南
- C - 備忘單
- C - 有用資源
- C - 討論
在C語言中,陣列作為函式引數進行傳遞
如果你想將陣列傳遞給某個函式,你可以使用 按值傳遞 或 按引用傳遞 方法。在按值傳遞方法中,對函式的引數應是已初始化的陣列,或與要傳遞的陣列大小相等的固定大小的陣列。在按引用傳遞方法中,函式引數是陣列的指標。
使用按值傳遞方法傳遞陣列
在以下程式碼中,main() 函式 帶有一個整數陣列。透過將陣列傳遞給使用者定義的函式 average() 來呼叫該函式。average() 函式接收陣列,並使用 for 迴圈 將其元素相加。它返回一個浮點值,表示陣列中數字的平均值。
示例
#include <stdio.h> float average(int arr[5]); int main(){ int arr[] = {10, 34, 21, 78, 5}; float avg = average(arr); printf("average: %f", avg); } float average(int arr[5]){ int sum=0; int i; for (i=0; i<5; i++){ printf("arr[%d]: %d\n", i, arr[i]); sum+=arr[i]; } return (float)sum/5; }
輸出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 average: 29.600000
在以下變體中,average() 函式被定義為具有兩個引數,即未初始化的陣列,未指定任何大小。透過將陣列大小除以 int 資料型別 的大小,可以獲取 main() 函式中宣告的陣列的長度。
示例
#include <stdio.h> float average(int arr[], int length); int main(){ int arr[] = {10, 34, 21, 78, 5}; int length = sizeof(arr)/sizeof(int); float avg = average(arr, length); printf("average: %f", avg); } float average(int arr[], int length){ int sum=0; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d\n", i, arr[i]); sum+=arr[i]; } return (float)sum/length; }
輸出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 average: 29.600000
使用按引用傳遞方法傳遞陣列
為了使用此方法,我們應理解以下事實:陣列中的元素具有相似的 資料型別,儲存在連續的記憶體位置中,並且陣列大小取決於資料型別。而且,第 0 個元素的地址是指向陣列的指標。
在以下示例中 −
int a[5] = {1,2,3,4,5};
陣列大小為 20 位元組(每個 int 4 位元組)
Int *x = a;
這裡 x 是指向陣列的指標。它指向第 0 個元素。如果指標增加 1,它指向下一個元素。
示例
#include <stdio.h> int main() { int a[] = {1,2,3,4,5}; int *x = a, i; for (i=0; i<5; i++){ printf("%d\n", *x); x++; } return 0; }
輸出
1 2 3 4 5
讓我們使用此特性來透過引用傳遞陣列。在 main() 函式中,我們宣告一個數組,並將它的地址傳遞給 max() 函式。max() 函式使用該指標遍歷陣列,並將陣列中最大的數字返回給 main() 函式。
示例
#include <stdio.h> int max(int *arr, int length); int main(){ int arr[] = {10, 34, 21, 78, 5}; int length = sizeof(arr)/sizeof(int); int maxnum = max(arr, length); printf("max: %d", maxnum); } int max(int *arr, int length){ int max=*arr; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d\n", i, (*arr)); if ((*arr)>max) max = (*arr); arr++; } return max; }
輸出
arr[0]: 10 arr[1]: 34 arr[2]: 21 arr[3]: 78 arr[4]: 5 max: 78
max() 函式從指標 arr 中接收 main() 傳遞過來的陣列地址。每次增加該指標時,它都會指向原始陣列中的下一個元素。
max() 函式還可以像以下定義中一樣訪問陣列元素,作為普通的帶下標的陣列 −
int max(int *arr, int length){ int max=*arr; int i; for (i=0; i<length; i++){ printf("arr[%d]: %d\n", i, arr[i]); if (arr[i]>max) max = arr[i]; } return max; }
將二維陣列傳遞給函式
您還可以將二維陣列的指標傳遞給函式。在函式中,將使用巢狀 for 迴圈結構遍歷二維陣列
示例
#include <stdio.h> int twoDarr(int *arr); int main(){ int arr[][3]= {10, 34, 21, 78, 5, 25}; twoDarr(*arr); } int twoDarr(int *arr){ int max=*arr; int i, j; for (i=0; i<2; i++){ for (j=0; j<3; j++){ printf("%d\t", arr[i]); arr++; } printf("\n"); } }
輸出
10 34 21 5 25 16
比較字串長度的函式
在以下程式中,將兩個字串傳遞給 compare() 函式。在 C 中,字串是 char 資料型別的陣列。我們使用strlen() 函式查詢字串的長度,即其中的字元數。
示例
#include <stdio.h> #include <string.h> int compare( char *, char *); int main() { char a[] = "BAT"; char b[] = "BALL"; int ret = compare(a, b); return 0; } int compare (char *x, char *y){ int val; if (strlen(x)>strlen(y)){ printf("length of string a is greater than or equal to length of string b"); } else{ printf("length of string a is less than length of string b"); } }
輸出
length of string a is less than length of string b