1. 有返回值函数
在有返回值的函数中,
return语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。
2. 没有返回值函数
在没有返回值的函数中也可以使用
return语句,例如当检查到一个错误时提前结束当前函数的执行并返回:
#include void print_logarithm(double x) { if (x <= 0.0) { printf("Positive numbers only, please.\n"); return; } printf("The log of x is %f", log(x)); }
3. if-else中使用return函数
在if-else中我们定义了一个检查奇偶性的函数,如果是奇数就打印
x is odd.,如果是偶数就打印x is even.。事实上这个函数并不十分好用,我们定义一个检查奇偶性的函数往往不是为了打印两个字符串就完了,而是为了根据奇偶性的不同分别执行不同的后续动作。我们可以把它改成一个返回布尔值的函数:
int is_even(int x) { if (x % 2 == 0) return 1; else return 0; }
4. 函数返回一个值相当于定义一个和返回值类型相同的临时变量并用return后面的表达式来初始化
int is_even(int x) { if (x % 2 == 0) return 1; else return 0; } int i = 19; if (is_even(i)) { /* do something */ } else { /* do some other thing */ }例如上面的函数调用相当于这样的过程:
int 临时变量 = !(x % 2); 函数退出,局部变量x的存储空间释放; if (临时变量) { /* 临时变量用完就释放 */ /* do something */ } else { /* do some other thing */ }当
if语句对函数的返回值做判断时,函数已经退出,局部变量x已经释放,所以不可能在这时候才计算表达式!(x % 2)的值,表达式的值必然是事先计算好了存在一个临时变量里的,然后函数退出,局部变量释放,if语句对这个临时变量的值做判断。注意,虽然函数的返回值可以看作是一个临时变量,但我们只是读一下它的值,读完值就释放它,而不能往它里面存新的值,换句话说,函数的返回值不是左值,或者说函数调用表达式不能做左值,因此下面的赋值语句是非法的:is_even(20) = 1;