函數按是否有返回值, 可以分為兩種類型:一是無返回值的類型, 只是提供一種執行效果, 可以單獨構成一個語句。 二是有返回值的類型, 提供一個返回值, 用於運算式或函數參數中。 其實, 如果是用指標或引用作為函數參數, 即使沒有返回值, 也可以對指標指向的資料或引用的資料發生改變。
函數結果有三種帶出方式:分別是全域變數、函數返回值、傳址參數。 通過參數表的參數傳遞是一種參數顯式傳遞方式, 而通過全域變數是一種隱式參數傳遞。
值傳遞方式中, 值參數的作用域相當於該函數的區域變數,
以指標作為函數參數, 或以引用作為函數參數(C++)可以帶出結果值。
若函數結果需要帶出多個值, 該怎樣實現呢?
1 全域變數方式:在函數體內操作全域變數;
2 陣列方式:如果要返回的是多個相同類型的值, 則可以將這些值放在一個陣列中, 然後返回資料的指標或首位址, 但這個定義在函數體內的陣列必須是靜態方式(靜態類型保存在全域靜態存儲區, 生命期可保持到程式結束);
3 結構體方式:如果要返回的是多個不同類型的值, 則可以將這些值放到一個結構體中, 然後返回結構體或結構體指標, 但應注意的是該結構體必須是在全域範圍內定義的結構體。
4 指標作為參數的方式:指標作為參數, 函式呼叫時, 操作的是指標指向的變數;
5 引用作為參數的方式:引用作為參數, 函式呼叫時, 操作的是引用位址指向的引用變數;
下面用實例來說明:
代碼:
運行結果:
1 3 9 8 4 2 5 0 7 6
max=9,min=0
max=9,min=0
max=9,min=0
max=9,min=0
max=9,min=0
max=9,min=0
附原碼:
#include
#include
typedef struct//定義結構體;
{
int max,min;
} Data;
int MIN;//全域變數;
/* 1 ==================================================
函數功能:通過全域變數MIN帶回最小值、return返回最小值
函數輸入:陣列a、陣列長度
函數輸出:輸出一個陣列的最大值和最小值
==================================================*/
int fun1(int a[],int n)
{
int max;
int i=1;
max=MIN=a[0];//初始化最大值、最小值
for(i=1; i { if(a[i]>max) max=a[i]; if(a[i] } return max;//函數直接返回max; } /* 2================================================== 函數功能:return返回一個陣列指標,陣列元素包括最大值、最小值 函數輸入:陣列a、陣列長度 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ int *fun2(int a[],int n) { int i; static int b[2];//定義靜態變數 b[0]=b[1]=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>b[0]) b[0]=a[i]; if(a[i] } return b;//返回b[]陣列的位址; } /* 3================================================== 函數功能:return返回一個結構體指標,結構體元素包括最大值、最小值 函數輸入:陣列a、陣列長度n 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ Data *fun3(int a[],int n) { Data *p; int i; p=(Data *)malloc(sizeof(Data));//指標初始化; p->max=p->min=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>p->max) p->max=a[i]; if(a[i] } return p;//返回結構體指標 } /* 4================================================== 函數功能:return返回一個結構體,結構體元素包括最大值、最小值 函數輸入:陣列a、陣列長度n 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ Data fun4(int a[],int n) { Data p; int i; p.min=p.max=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>p.max) p.max=a[i]; if(a[i] } return p;//直接返回結構體; } /* 5================================================== 函數功能:通過兩個指針參數帶回最大值、最小值 函數輸入:陣列a、陣列長度n、指標p、指標q 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ void fun5(int a[],int n,int *p,int *q) { int i=1; *p=*q=a[0];//初始化最大值、最小值 for(i=1; i { if(*p if(*q>a[i]) *q=a[i]; } } /* 6================================================== 函數功能:通過兩個變數引用(別名)帶回最大值、最小值 函數輸入:陣列a、陣列長度n、變數引用p、變數引用q 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ void fun6(int a[], int n, int &p,int &q)//變數引用適用於C++,不適用於C { p=q=a[0];//初始化最大值、最小值 for(int i=1; i { 運行結果: 1 3 9 8 4 2 5 0 7 6 max=9,min=0 max=9,min=0 max=9,min=0 max=9,min=0 max=9,min=0 max=9,min=0 附原碼: #include #include typedef struct//定義結構體; { int max,min; } Data; int MIN;//全域變數; /* 1 ================================================== 函數功能:通過全域變數MIN帶回最小值、return返回最小值 函數輸入:陣列a、陣列長度 函數輸出:輸出一個陣列的最大值和最小值 ==================================================*/ int fun1(int a[],int n) { int max; int i=1; max=MIN=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>max) max=a[i]; if(a[i] } return max;//函數直接返回max; } /* 2================================================== 函數功能:return返回一個陣列指標,陣列元素包括最大值、最小值 函數輸入:陣列a、陣列長度 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ int *fun2(int a[],int n) { int i; static int b[2];//定義靜態變數 b[0]=b[1]=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>b[0]) b[0]=a[i]; if(a[i] } return b;//返回b[]陣列的位址; } /* 3================================================== 函數功能:return返回一個結構體指標,結構體元素包括最大值、最小值 函數輸入:陣列a、陣列長度n 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ Data *fun3(int a[],int n) { Data *p; int i; p=(Data *)malloc(sizeof(Data));//指標初始化; p->max=p->min=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>p->max) p->max=a[i]; if(a[i] } return p;//返回結構體指標 } /* 4================================================== 函數功能:return返回一個結構體,結構體元素包括最大值、最小值 函數輸入:陣列a、陣列長度n 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ Data fun4(int a[],int n) { Data p; int i; p.min=p.max=a[0];//初始化最大值、最小值 for(i=1; i { if(a[i]>p.max) p.max=a[i]; if(a[i] } return p;//直接返回結構體; } /* 5================================================== 函數功能:通過兩個指針參數帶回最大值、最小值 函數輸入:陣列a、陣列長度n、指標p、指標q 函數輸出:輸出一個陣列的最大值和最小值 ====================================================*/ void fun5(int a[],int n,int *p,int *q) { int i=1; *p=*q=a[0];//初始化最大值、最小值