函数调用主要有两种方式:函数调用表达式和函数调用语句
1.函数作为表达式的一部分,例如
代码语言:javascript复制 big = max(10, 100); //作为赋值表达式的一部分
printf("%dn", max(10, 100)); //作为printf函数的实际参数
sum = max(x, y) 200; //作为算术表达式的一部分
2.函数调用语句,例如
代码语言:javascript复制 printf("Welcome to Cn");
函数调用构成一条单独的语句
程序执行到一个函数调用另一个函数的语句时,程序的执行流程从发生函数调用的位置离开主调函数,转移到被调函数开始执行。被调函数中执行到return语句或执行完最后一条语句时,程序执行流程重新回到主调函数的离开位置,继续执行主调函数后面的语句或表达式。
示例程序如下:
代码语言:javascript复制 #include <stdio.h>
int max(int a, int b)
{
int result;
if(a > b)
result = a;
else
result = b;
return result;
}
int main()
{
int i = ;
int j = ;
int x = max(i, j);
printf("x=%dn", x);
return ;
}
调用思维图:
函数参数的值传递
调用定义了形参的函数时需要把实参的值传递给形参,前面说过,实参必须与函数定义中的形参在次序和数量上匹配,在数据类型上兼容。
C语言同时规定,实参向形参的传递数据是单向值传递。
例:使用函数实现交换两个整数的值。
参考代码:
代码语言:javascript复制#include <stdio.h>
void swap(int a, int b)
{
int temp;
printf("a=%d, b=%dn", a, b);
temp = a;
a = b;
b = a;
printf("a=%d, b=%dn", a, b);
}
int main()
{
int x = , y = ;
printf("x=%d, y=%dn", x, y);
swap(x, y);
printf("x=%d, y=%dn", x, y);
return ;
}
结果示例:
从程序的运行结果可以看出,main函数中实参变量x和y的值并没有发生交换,为什么会出现这样的情况呢?
按照C语言的参数传递规则,实参变量x和y的值分别被“单向传递”给形参变量a和b,swap函数中对变量a和b的值进行了交换,而变量a和b值的变化不会影响实参变量x和y,因此造成上述程序的运行结果。