C 函数调用

C 函数的 “普通调用”

如果一个函数仅仅是定义而没有被调用的话,则函数本身是不会执行的(认真琢磨这句话,非常重要)。我们都知道 C 代码是从 main() 函数 内部从上到下执行的,如果碰到函数调用部分,才会去执行函数定义部分。也就是说,函数定义之后只有被调用才有意义。

示例 1:求出两个数的最大值

#include <stdio.h>

int getMax(int a, int b)
{
    if (a > b)
    {
        return a;
    }
    else
    {
        return b;
    }
}
int main(void)
{
    printf("%d", getMax(10, 20));
    return 0;
}

运行结果如下。

20

分析:

对于上面的 getMax() 函数,我们可以简写成下面代码。

int getMax(int a, int b)
{
    return a > b ? a : b;
}

示例 2:求一个数的绝对值

#include <stdio.h>

float getAbs(float n)
{
    if (n >= 0)
    {
        return n;
    }
    else
    {
        return -n;
    }
}
int main(void)
{
    printf("%f", getAbs(-10.0));
    return 0;
}

运行结果如下。

10.000000

分析:

对于上面的 getAbs() 函数,我们可以简写成下面代码。

float getAbs(float n)
{
    return n >= 0 ? n : -n;
}

C 函数的 “嵌套调用”

在 C 语言中,函数是不允许嵌套定义的,也就是在一个函数内部不能再定义一个新的函数。但是它却允许嵌套调用,即在一个函数中可以调用另一个函数。

示例 3:嵌套调用

#include <stdio.h>

// 求一个数的平方
int getSquare(int a)
{
    return a * a;
}
// 求累加的和
int getSum(int n)
{
    int result = 0;
    for(int i = 1; i <= n; i++)
    {
        result += getSquare(i);
    }
    return result;
}
int main(void)
{
    printf("%d", getSum(5));
    return 0;
}

运行结果如下。

55

分析:

上面这个例子实现的功能是:计算 1^2 + 2^2 + ... + n^2的和。这里我们定义了 2 个函数,getSquare() 用于求一个数的平方,然后 getSum() 用于求累加的和。

在 getSum() 中,我们调用了 getSquare(),这种方式就是嵌套调用,也就是在一个函数内部调用另一个函数。聪明的小伙伴可能发现了,其实在主函数 main() 中去调用另一个函数,本质上也是嵌套调用的做法。说得一点都没错,确实是这样的。

示例 4:带返回值的嵌套调用

#include <stdio.h>

// 定义 square():返回一个整数的平方
int square(int n) 
{
    return n * n;
}

// 定义 addAndSquare():先将两个数相加,然后计算结果的平方
int addAndSquare(int a, int b) 
{
    int sum = a + b;
    return square(sum);    // 调用 square()
}

int main(void) 
{
    int result = addAndSquare(2, 3);    // 调用 square()
    printf("%d", result);
    
    return 0;
}

运行结果如下。

25

分析:

在上面例子中,main() 函数调用了 addAndSquare() 函数。addAndSquare() 函数内部先计算了 a 和 b 的和,然后将这个和作为参数传递给 addAndSquare() 函数进行调用,最终返回平方值。从这个例子可以直观看出带返回值的函数是如何进行嵌套调用的,返回值会一级一级地传递回去。

上一篇: C 函数定义

下一篇: C 函数参数

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号