C语言函数返回规则与参数传递解析

需积分: 34 4 下载量 89 浏览量 更新于2024-07-13 收藏 112KB PPT 举报
"本资源主要介绍了C语言中的函数定义、返回规则、函数声明、函数调用、形式参数与实际参数的概念以及值传递原则。同时,通过示例解释了为什么在原始的swap函数中无法实现两个变量的交换,并提供了使用指针正确交换变量的方法。" 在C语言中,函数是代码的复用单元,它们可以接受输入(参数)并返回结果(返回值)。关于`return`返回规则,有以下几点需要注意: 1. 如果函数不需要返回任何值,那么它的类型应该声明为`void`。在这种情况下,可以省略`return`语句,但通常为了代码的清晰性,即使不返回值,也建议在函数末尾添加`return;`。 2. 对于`void`类型的函数,不写`return`语句是允许的,因为它们不会返回任何值。 3. 对于非`void`类型的函数,必须至少有一个`return`语句来返回一个值。如果函数没有`return`语句或者`return`了一个非该函数类型所对应的值,编译器将会报错。 4. 当函数内部可能出现多种错误情况时,最好将错误处理集中在一个`return`语句中,以简化代码和提高可读性。然而,对于不同类型的错误,使用多个`return`语句分别处理可以更明确地指出错误来源。 函数声明用于告诉编译器函数的名称、返回类型和参数列表,以便在调用函数之前编译器知道如何处理。在同一C文件中,如果函数定义在其后,可以使用函数声明提前告知编译器。而在不同文件之间,需要使用`extern`关键字来声明外部函数。 函数调用可以直接将函数名和参数列表放在表达式中,如`iSum=add(123,98);`,也可以作为其他函数的参数,如`printf("Sum=%d\n",add(789,-56));`。 形式参数(形参)是在函数定义中使用的占位符,而实际参数(实参)是在调用函数时传递给形参的实际值。C语言中的函数参数遵循值传递原则,这意味着实参的值被复制给形参,而不是其地址。因此,像原始`swap`函数那样试图通过形参改变实参的值是无效的,因为形参和实参在内存中位于不同的位置。 要实现两个变量的交换,可以使用指针。指针存储变量的地址,因此可以通过改变指针指向的值来改变原始变量。例如,改进后的`swap`函数如下: ```c void swap(int *x, int *y) { int t; t = *x; *x = *y; *y = t; } int main(void) { int a = 5, b = -3; swap(&a, &b); printf("%d, %d", a, b); return 0; } ``` 在这个版本中,`&a`和`&b`是a和b的地址,它们被传递给`swap`函数,函数通过指针修改了原始变量的值,从而实现了交换。