- 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()不会直接返回值给调用函数。相反,它终止程序并返回一个状态码。这是一个整数,表示程序的退出状态,指示成功或失败。