return 用來終止一個函數並返回其後面跟著的值,相對很簡單。
return (Val);//此括號可以省略。但一般不省略,尤其在返回一個表達式的值時。return 可以返回些什麼東西呢?看下面例子:
char * Func(void)
{
char str[30];
…
return str;
}
str 屬於局部變量,位於棧內存中,在Func 結束的時候被釋放,所以返回str 將導致錯誤。
注意:return 語句不可返回指向“棧內存”的“指針”,因為該內存在函數體結束時被自動銷毀。
函數的值只能通過return語句返回主調函數。
return 語句的一般形式為:
return 表達式;
或者為:
return (表達式);
該語句的功能是計算表達式的值,並返回給主調函數。
1)在函數中允許有多個return語句,但每次調用只能有一個return 語句被執行,因此只能返回一個函數值。
2) 函數值的類型和函數定義中函數的類型應保持一致。如果兩者不一致,則以函數類型為准,自動進行類型轉換。
3) 如函數值為整型,在函數定義時可以省去類型說明。
4) 不返回函數值的函數,可以明確定義為“空類型”,類型說明符為“void”。一旦函數被定義為空類型後,就不能在主調函數中使用被調函數的函數值了。例如,在定義s為空類型後,在主函數中寫下述語句
sum=s(n);
就是錯誤的。為了使程序有良好的可讀性並減少出錯, 凡不要求返回值的函數都應定義為空類型。在返回類型為void的函數中,你同樣可以強制結束函數運行,使用"return ;"方法。
所以這裡還是說一下return的兩種用法:
1、沒有返回值的函數
不帶返回值的return語句只能用於返回類型為void的函數,return語句是為了引起函數的強制結束,這種用法類似於循環結構中的break語句的作用。 例子:
[html] view plaincopyprint?
void swap(int &v1,int &v2)
{
if(v1==v2)
return;
int temp=v2;
v2=v1;
v1=tmp;
}
void swap(int &v1,int &v2)
{
if(v1==v2)
return;
int temp=v2;
v2=v1;
v1=tmp;
}
2、具有返回值的函數
任何返回類型不是void的函數都必須返回一個值,而且這個返回值的類型必須和函數的返回類型相同,或者能隱式轉化為函數的返回類型。
[html] view plaincopyprint?
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
main()
{
int max(int a,int b);
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("maxmum=%d",z);
}
int max(int a,int b)
{
if(a>b)return a;
else return b;
}
main()
{
int max(int a,int b);
int x,y,z;
printf("input two numbers:\n");
scanf("%d%d",&x,&y);
z=max(x,y);
printf("maxmum=%d",z);
}不在多說return的用法了,很簡單,沒什麼可深入的了,只是需要額外注意返回指針的情況,上面也已經提到過了。