- 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