- 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語言 - 主函式
- 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語言 - 函式指標
- C語言 - 指向陣列的指標
- C語言 - 指向結構體的指標
- C語言 - 指標鏈
- C語言 - 指標與陣列
- C語言 - 字元指標和函式
- C語言 - 空指標
- 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語言 - typedef
- 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語言中的返回語句
return 語句終止函式的執行,並將控制權返回給呼叫函式。每個函式都應該以return語句作為其最後一條語句。使用return語句時,返回型別和返回值(表示式)必須相同。
return語句的語法
以下是return語句的語法:
return value_or_expression;
下面的main()函式顯示return作為其最後一條語句:
int main(){
// function body;
return 0;
}
main()函式返回0表示函式成功完成。要指示函式失敗,則返回一個非零表示式。
void返回語句
函式的返回型別可以是void。在這種情況下,return語句是可選的。它可以省略,或者使用不帶任何表示式的return。
示例
#include <stdio.h>
/* function declaration */
void test(){
return;
}
int main() {
test();
printf("end");
return 0;
}
return語句中的返回型別不匹配
程式中的每個函式都必須有其原型的向前宣告。預設情況下,每個函式都返回一個整數。但是,沒有原型的其他返回型別的函式是不可接受的。
示例
int main(){
test(5);
printf("end");
return 0;
}
float test(int a) {
return 1.1 ;
}
輸出
Error: C:\Users\mlath\test.c|12|error: conflicting types for 'test'
這是因為沒有原型的函式被假定為int型別,這與定義衝突。
如果原型中函式的返回型別與返回表示式的型別不匹配,也會發生相同的錯誤,如下所示:
float test(int);
int main(){
test(5);
printf("end");
return 0;
}
float test(float a){
return 1.1 ;
}
使用return語句的多個返回值
一個函式可以定義多個引數,但只能返回一個值。但是,您可以使用多個條件返回語句,如下所示:
示例
int test(int);
int main() {
test(5);
printf("end");
return 0;
}
int test(int a){
if (a<3)
return 1;
else
return 0;
}
返回陣列的函式
無法將整個陣列作為引數返回給函式。但是,您可以透過指定陣列名稱而不帶索引來返回指向陣列的指標。
示例
下面的程式演示瞭如何將陣列傳遞給一個函式,該函式在執行某個過程後返回一個數組。
#include <stdio.h>
int* test(int *);
int main(){
int a[] = {1,2,3,4};
int i;
int *b = test(a);
for (i=0; i<4; i++){
printf("%d\n", b[i]);
}
return 0;
}
int * test(int*a){
int i;
for (i=0; i<4; i++){
a[i] = 2*a[i];
}
return a;
}
輸出
2 4 6 8
函式只能使用return語句返回單個值。要返回多個值,我們使用指標或結構體。
使用exit()代替return語句
與return語句不同,exit()函式也用於終止程式的執行,而無需將控制權返回給呼叫函式。當程式完成執行或發生不可恢復的錯誤時,它用於函式內部。這是在C語言中處理異常錯誤的標準方法。當呼叫exit()時,程式控制不會返回到呼叫exit()的地方。相反,控制權將交還給作業系統。
exit()函式是在stdlib.h標頭檔案中定義的庫函式。
語法
void exit(int status);
exit()通常從main()函式或任何其他函式呼叫以終止整個程式。
它包含在<stdlib.h>標頭檔案中。
由於它會導致程式終止,因此exit()不會直接返回值給呼叫函式。相反,它終止程式並返回一個狀態碼。這是一個整數,表示程式的退出狀態,指示成功或失敗。