在C語言中,函數的參數分為形參和實參。形參出現在函數定義中,在整個函數體内都可以使用,離開該函數則不能使用。實參出現在函數調用中。
C 語言是結構化語言,它的主要結構成分是函數。函數被作為一種構件,用以完成程式中的某個具體功能。函數允許一個程式的各個任務被分别定義和編碼,使程式子產品化。本章介紹 C 語言函數的設計,如何用函數分解程式的各個功能,如何使用函數構成子產品化程式,以及代碼複用的基本思想。
函數說明 與 傳回值
函數的一般形式如下:
類型說明符 函數名(參數表)
參數說明段
{
函數體
}
1 函數的類型說明
函數的類型說明符可以是任何資料類型,包括空值型 void,即不使用 return 語句傳回任何資料。預設情況下,函數被自動說明為整型。函數必須在第一調用前定義,這樣編譯器才能找到該函數。前置函數類型說明被稱為 函數原型。
#include
#include
#define PI 3.141593
float cylinder_area(float, float); // 函數的類型說明,函數原型
int main()
{
float r, h, s; // r圓半徑,h高,s面積
puts("請輸入圓柱的半徑和高:");
if (scanf("%f,%f", &r, &h) == 2)
{
s = cylinder_area(r, h); // 調用函數 cylinder_area(),傳回值到變量s
printf("\n該圓柱體的表面積為:%f\n", s);
}
else
{
puts("您輸入的資料格式不合法!");
}
return EXIT_SUCCESS;
}
float cylinder_area(float r, float h)
{
float cd_area;
cd_area = 2 * (PI * r * r) (2 * PI * r * h);
return cd_area;
}
設計函數時需要注意資料類型的比對關系,函數的類型說明符必須與 return 語句傳回的資料類型相同,函數的參數說明必須與參數的資料類型相同,否則會造成編譯錯誤。
2 傳回語句
函數的傳回語句 return 有 2 個作用:其一,結束目前函數,調用者獲得程式控制權;其二,将計算結果傳遞給調用者。
函數的結束有 2 種情況,一是函數體内所有的代碼執行完畢,二是 return 語句被執行。
C語言函數的參數和傳回值
函數的參數
函數的參數分為形參和實參。形參出現在函數定義中,在整個函數體内都可以使用,離開該函數則不能使用。實參出現在函數調用中。
形參和實參的功能是作資料傳送,發生函數調用時,實參的值會傳送給形參。
形參和實參有以下幾個特點:
1) 形參變量隻有在函數被調用時才配置設定記憶體單元,在調用結束時,立刻釋放所配置設定的記憶體單元。是以,形參隻有在函數内部有效,不能在函數外部使用。
2) 實參可以是常量、變量、表達式、函數等,無論實參是何種類型的資料,在進行函數調用時,它們都必須有确定的值,以便把這些值傳送給形參。是以應預先用指派,輸入等辦法使實參獲得确定值。
3) 實參和形參在數量上、類型上、順序上必須嚴格一緻,否則會發生“類型不比對”的錯誤。
函數調用中發生的資料傳送是單向的,隻能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。 是以在函數調用過程中,形參的值發生改變,而實參中的值不會變化。
【示例】計算 1 2 3 ... (n-1) n 的值。
#include
int sum(int n){
int i;
for(i=n-1; i>=1; i--){
n =i;
}
printf("The inner n = %d\n",n);
return n;
}
int main(){
int n, total;
printf("Input a number: ");
scanf("%d",&n);
total = sum(n);
printf("The outer n = %d \n", n);
printf("1 2 3 ... (n-1) n = %d\n", total);
return 0;
}
運作結果:
Input a number: 100?
The inner n = 5050
The outer n = 100
1 2 3 . .. (n-l) n = 5050
通過 scanf 輸入 n 的值,作為實參,在調用 sum 時傳送給形參量 n。
注意:本例中形參變量和實參變量的名稱都是 n,但這是兩個不同的量,各自的作用域不同,下節将會講解。
在mian函數中用printf 語句輸出一次n值,這個n值是實參n的值。在函數sum中也用printf 語句輸出了一次n值,這個n值是形參最後取得的n值。
從運作情況看,輸入n值為100,即實參n的值為100,把此值傳給函數sum時,形參n的初值也為100,在執行函數過程中,形參n的值變為5050。函數運作結束後,輸出實參n的值仍為100。可見實參的值不随形參的變化而變化。
函數的傳回值
函數的值(或稱函數傳回值)是指函數被調用之後,執行函數體中的程式段所取得的值,可以通過return語句傳回。
return語句的一般形式為:
return 表達式;
或者:
return (表達式);
例如:
return max;
return a b;
return (100 200);
函數中可以有多個 return 語句,但每次調用隻能有一個return 語句被執行,是以隻有一個傳回值。
一旦遇到 return 語句,不管後面有沒有代碼,函數立即運作結束,将值傳回。例如:
int func(){
int a=100, b=200, c;
return a b;
return a*b;
return b/a;
}
傳回值始終 a b 的值,也就是300。
沒有傳回值的函數為空類型,用void進行說明。例如:
void func(){
printf("Hello world!\n");
}
一旦函數的類型被定義為 void,就不能再接受它的值了。例如,下面的語句是錯誤的:
int a = func();
為了使程式有良好的可讀性并減少出錯, 凡不要求傳回值的函數都應定義為空類型。