函数(二)(函数的调用与值传递)

2022-04-11 17:55:45 浏览数 (1)

函数的调用

函数调用主要有两种方式:函数调用表达式和函数调用语句

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,因此造成上述程序的运行结果。

0 人点赞