?? codetc38.dat
字號:
函數的返回值
通常,希望通過函數調用使主調函數能得到一個確定的值,這就是函數的返回值。例中max(2,3)的值是3,max (5,2)的值是5。賦值語 句將這個函數值賦給變量。下面對函數作一些說明:
(1)函數的返回值是通過函數中的return語句獲得的。return語句將被調用中的一個確定值帶回主調函數中去。
如果需要從被調用函數帶回一個函數值(供主調函數使用),被調用函數中必須包含return語句。如果不需要從被調用函數帶回函數值可以 不要return語句。
一個函數中可以有一個以上的return語句,執行到哪一個return語句,哪一個語句起作用。
return語句后面的括弧也可以不要,如
return z;
它與"return(z);"等價。
return后面的值是一個表達式。例2.1中的函數max可以必定如下:
max (int x,int y)
{
return(x>y?x:y);
}
這樣的函數體更為簡短,只用一個return語句就把求值和返回都解決了。
(2)函數值的類型。既然函數有返回值,這個值當然應屬于某一個確定的類型,應當在定義函數時指定函數數值的類型。例:
int max (float x,float y) /*函數值為整型*/
char letter(char c1,char2) /*函數值為字符型*/
double min(int x,int y) /*函數值為雙精度型*/
讀者會問:例中的函數定義沒有說明其類型,為什么?C語言規定,凡不加類型說明的函數,一律自動按整型處理。例中的max 函 數返回 值為整型,通過return語句把 z的值作為max的函數值,由max帶回主調函數。z的類型與max函數的類型是相一致的。是正確的。
(3)如果函數值的類型和return語句中表達式的值不一致,則以函數類型為準。對數值型數據,自動進行類型轉換。即函數類型決定返回 值的類型。
例:返回值類型與函數類型不同。稍改動為:
main()
{
float a,b;
int c;
scanf("%F,%f,"&a,&b);
c=max (a,b);
printf("Mains %d\n",c);
}
max (float x,float y);
{float z; /*為實型變量*/
z=x>y?x:y;
return(z);
}
運行情況如下:
1.5,2.5
max is 2
函數max定義為整型,而return語句中的z為實型,二者不一致,按上的規定,先將z轉換為整型,然后max(x,y)帶回一個整型值2回主調函 數main函數中的c定義為實型 ,用%f格式符輸出,也是輸出2.000000。
有時,可以利用這一特點進行類型轉換,如在函數中進行實型運算,希望返回的是整型量,可讓系統去自動完成類型轉換。但這種做法往 往使程序不清晰,可讀性降低, 容易弄錯,而且并不是所有的類型都能互相轉換的(如實數與字符類型數據之間)。因此建議初學者不要采用這 種方法,而應做到函數類型與return返回值的類型一致。
(4)如果被調用函數中沒有return語句,并不帶回一個確定的,用戶所希望得到的函數值,但實際上,函數并不是不帶回值,而只是不帶 回有用的值,帶回的是一個不確定的 值。盡管沒有要求printstar和print_message函數帶回值,但是如果在程序中出現下面的語句合法的:
{int a,b,c;
a=printstar();
b=print_message();
c=printstar();
printf("%d,%d,\n",a,b,c);
}
運行時除了得到和例中一樣的結果個外,還可以輸出a,b,c的值(今為21,20,21)。a,b,c的值不一定有實際意義(今printstar函數輸出21個字 符,返回值 為21,print_message輸出20個字條,返回值為20)。
(5)為了明確表示"不帶回值",可以用"void"定義"無類型"(或稱"空類型")。
例中的定義可以改為:
void printstar()
{ }
voie peint_message()
{ }
這樣,系統就保證不使函數帶回任何值,即禁止在調用函數中使用被調用函數的返回值。如果已將printstar和ptint_message函數定義為 void類型,則下面的用法就 是錯誤的:
a=printstar();
b=print_message();
編譯時會給出出錯信息。
為使程序減少出錯,保證正確調用,凡不要求帶回函數值的函數,一般應定義為void類型。許多C語言書的程序中都大量用到void類型函 數,讀者應對此有一定了解。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -