C语言 —— 函数(二)

一、C语言函数执行流程

代码:

#include <stdio.h>

void one()
{
	printf("欢迎学习c语言!\n");
}

int main()
{
	one();	// one的调用

	return 0;
}

第一步: 进入main()函数;
第二步: 调用one()函数;
①: 它会在main()函数的前寻找有没有一个名字叫“one”的函数定义;
②: 如果找到,接着检查函数的参数,这里调用函数时没有传参,函数定义也没有形参,参数类型匹配;
③:开始执行one()函数,这时候,main()函数里面的执行会阻塞( 停 )在one()这一行代码,等待one()函数的执行。
第三步:one()函数执行完( 这里打印一句话 ),main()才会继续往下执行,执行到return 0, 程序执行完毕。

二、C语言函数的嵌套调用

在C语言中,能够使用函数嵌套调用的机制,这种嵌套调用的方式可以将一些复杂的操作流程进行分步完成,从而增强程序的可读性和可维护性,这在大型程序中尤其重要。

函数嵌套调用的基本语法格式如下:

return_type function_name_1(arguments_1) {
    // function_name_1 code
    return function_name_2(arguments_2);
}

return_type function_name_2(arguments_2) {
    // function_name_2 code
    return function_name_3(arguments_3);
}

return_type function_name_3(arguments_3) {
   // function_name_3 code
   return some_value;
}

如上所示,这里有三个函数 function_name_1、function_name_2 和 function_name_3,它们互相调用。
function_name_1 调用 function_name_2 函数时,function_name_1 函数的执行暂停,function_name_2 函数开始执行。
function_name_2 函数调用 function_name_3 函数时,function_name_2 函数的执行暂停,function_name_3 函数开始执行。
一旦 function_name_3 函数执行完毕并返回一个值,控制权会传递回 function_name_2 函数,function_name_2 函数接着执行,并将返回值传递给 function_name_1 函数。最终,function_name_1 函数的执行也会继续,直到它返回一个值。

函数嵌套调用可以无限地进行下去,也就是说,你可以在任何一个函数中调用另一个函数,只要你遵循C语言的函数调用规则。需要注意的是函数的调用栈有一定的大小限制,如果调用层数过多,可能会导致栈溢出的问题。

函数嵌套调用在C语言中应用广泛,有助于提高程序的模块化和可读性,同时还可以减少一些冗余的代码。在程序设计中,我们应该恰当地运用函数嵌套调用,切勿滥用,以免导致调用层数过多带来的问题。

例子:计算sum = 1! + 2! + 3! + … + (n-1)! + n!

#include <stdio.h>
//求阶乘
long factorial(int n){
    int i;
    long result=1;
    for(i=1; i<=n; i++){
        result *= i;
    }
    return result;
}
// 求累加的和
long sum(long n){
    int i;
    long result = 0;
    for(i=1; i<=n; i++){
        //在定义过程中出现嵌套调用
        result += factorial(i);
    }
    return result;
}
int main(){
    printf("1!+2!+...+9!+10! = %ld\n", sum(10));  //在调用过程中出现嵌套调用
    return 0;
}

三、C语言全局变量和局部变量

3.1、全局变量(Global Variable)

全局变量是在函数外部定义的变量,它们可以在整个程序范围内被访问和使用,即在任何函数中都可以使用这些变量。全局变量的作用域始于变量定义的位置,在程序结束时结束。

全局变量的优点是:它们可以方便地在程序的多个函数中使用,而不必在每个函数中传递参数。全局变量的缺点是:它们易受程序中其他函数的影响,因此需要小心处理。

以下是一些全局变量的定义示例:

int global_var = 10;   // 定义一个全局变量

void func1() {
    printf("The value of the global variable is %d\n", global_var);    
}

void func2() {
    global_var++;    // 修改全局变量的值
}

3.2、局部变量(Local Variable

局部变量是在函数内部定义的变量,它们只能在函数内部被访问和使用。局部变量的作用域始于变量定义的位置,在函数结束时结束。局部变量只能在定义它们的函数中使用,不能在其他函数中使用。

局部变量的优点是:它们只在定义它们的函数中可见,不会受到其他函数的影响。这使得程序更加安全,并且可以帮助避免变量名冲突。局部变量的缺点是:每个函数都需要重复定义。

以下是一些局部变量的定义示例:

void func() {
    int local_var = 20;   // 定义一个局部变量

    printf("The value of the local variable is %d\n", local_var);    
}

在函数内部,可以定义多个具有相同名称的局部变量,它们之间互不干扰。例如:

void func() {
    int local_var = 20;   // 定义一个局部变量

    // 定义一个名称相同的局部变量
    for (int i = 0; i < 10; i++) {
        int local_var = i;  
        printf("The value of the local variable is %d\n", local_var);    
    }

    printf("The value of the local variable is still %d\n", local_var);    
}

3.3、例子:长方体的长宽高求它的体积以及前、侧、上面的面积

代码:

#include <stdio.h>
int s1, s2, s3;  //面积
int vs(int a, int b, int c){
    int v;  //体积
    v = a * b * c;
    s1 = a * b;
    s2 = b * c;
    s3 = a * c;
    return v;
}
int main(){
    int v, length, width, height;
    printf("长方体长: 宽:  高: ");
    scanf("%d %d %d", &length, &width, &height);
    v = vs(length, width, height);
    printf("体积=%d, 长方体前面面积=%d, 长方体侧面面积=%d, 长方体上面面积=%d\n", v, s1, s2, s3);
    return 0;
}

运行结果:
在这里插入图片描述

总之,全局变量和局部变量是C语言中两种不同类型的变量,它们在作用域、生命周期和访问方式等方面有所不同。在编写程序时,需要根据具体情况选择使用哪种类型的变量。
C语言中,变量可以被定义为全局变量或局部变量,其主要区别在于作用域和生命周期。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值