黑马程序员——C语言笔记之函数

C语言函数详解
本文详细介绍了C语言中的函数概念、定义、参数、返回值、调用及递归函数等内容,并通过实例展示了递归函数的应用。

------- android培训java培训iOS培训.Net培训、期待与您交流! ----------

1、函数的概念

完成特定功能的代码段,它也是组成我们C语言源程序的基本单位

优点:

1)高程序的可读性

2)可以高开发的效率

3)提高代码重用性 

2、函数的定义格式:

返回值 函数名(形参列表){

函数体;

//return

}

按照有参数和返回值可分为四种:

有参无返回值:void test(int x,float y){ }

无参无返回值:void test1(){ }

有参有返回值:int max(int x,int y){ return x>y?x:y; }

无参有返回值:int test2(){ return 10;}

3、函数的参数

1)形参和实参

形参:在定义函数的时候,函数名后面小括号中的参数

void test(int x,float y){ } 

实参:调用函数的时候传递的参数

max(56,78); //56、78就是两个实际参数

2)参数的传递过程实质是,将实参的值拷贝一份放到函数形参中

4、函数的返回值

主调函数:

A、B两个函数 ,如果在A中调用了B,A为主调函数,B为被调函数。

被调函数:

被调函数返回给主调函数的值叫做函数的返回值
使用return 关键字进行返回

1) return 0; return (0);

2) return a+b; return a>b?a:b;

3) 如果函数的返回值是 void return ;(程序返回了,不再向下执行)

4) 函数中可以有多个return,但是只有一个起作用。

5、函数的调用

1)函数的声明:

为什么要进行声明?

类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经定义了某个函数为了防止编译器编译的时候报错(函数调用),所以要告诉编译器我已经定义了哪些函数。

原则:

在调用函数之前,进行该函数的声明。

声明的方法:

技巧:复制函数的头部,加上分号,写在调用方法之前

int max(int x,int y); //声明

2)函数的调用:

格式:函数名(实参列表);

max(56,78); //调用

6、递归函数

一个函数在它的函数体内调用它自身称之为递归函数。

构成条件:

1)自己调用自己

2)存在一个条件能够让递归结束

3)能够找到一个规律,让要解决的问题的规模缩小

递归函数的执行有两个阶段:

1)递推阶段:问题规模缩小的过程

2)回归迭代:迭代计算值的过程

递归的优点和缺点:

优点:遇到问题规模能够缩小,而且有规律的问题的时候,代码比较简洁。

缺点:太耗内存

建议:在程序中不能用太多 

#include <stdio.h>
//用递归法求n得阶乘
// 5!
// 5*4!
// 第一个:递归退出的条件:1! = 1
// 第二个:n! = (n-1)!*n
// 第三个:自己调用自己
int jieCheng(int n){
    int ji;
    //判断n==1,如果n=1,阶乘的结果就是1
    if (n==1) {
        ji = 1;
    }else{
        //如果n != 1,前一个数的阶乘乘以当前的n的值
        ji = jieCheng(n-1)*n;
    }
    return ji;
}
//求 x的y次方
int xy(int x,int y){
    int ji;
    //判断y==1
    if (y==1) {
        ji = x;
    }else{
        // 如果y !=1 此时,计算x的y-1次方 乘以 x
        // x y   x y-1 *x
        // 2^3   2^2   *2
        ji = xy(x,y-1)*x;  
    }
    return ji;
}
int main(int argc, const char * argv[]) {
//    int ji = jieCheng(8);
    int ji = xy(2,7);
    printf("ji = %d\n",ji);
    return 0;
}


<think>好的,我现在需要回答用户关于C语言函数返回是否可以为空的问题。首先,我得回忆一下C语言的标准规定。记得C标准中主函数返回类型应该是int,这样程序才能正确地向操作系统返回退出状态。如果用户问是否允许返回为空,可能是指void main()这种形式。 接下来,我需要查看用户提供的引用内容。引用[2]中提到有三种主函数形式,其中第一种是void main(void),但提到有些编译器可能不允许。引用[3]也讨论了省略void参数的情况,但主要针对参数而非返回。引用[1]中的例子显示main函数返回int,并通过atexit处理返回。 然后,我需要确认不同C标准版本的规定。比如C89、C99等,是否允许void返回类型。根据知识,C99及之后的标准要求main返回int,而void main()虽然在某些编译器(如旧版VC++)中被允许,但不符合标准,可能导致可移植性问题。 还要考虑用户可能的实际应用场景。例如,嵌入式系统可能有自己的启动代码,允许void main,但通用程序应遵循标准。此外,编译器警告和错误信息也可能影响是否允许这样的写法。 最后,需要总结答案,指出标准规定应为int,但某些编译器允许void,不过不建议使用,并引用提供的资料来支持结论。同时生成相关问题,帮助用户深入理解。</think>在C语言中,主函数$main()$的返回是否可以声明为"空"(即$void$类型),需要根据C语言标准和编译器实现来分析: ### 一、标准C语言规范 根据ISO C标准(C99/C11/C17),主函数必须声明为$int\ main(void)$或$int\ main(int\ argc,\ char*\ argv[])$形式,且必须返回整数。这是为了向操作系统传递程序的退出状态码,例如: ```c int main(void) { return 0; // 0表示成功执行 } ``` 未显式写$return$语句时,C99标准要求编译器自动补充$return\ 0$[^3]。 ### 二、非标准实现 部分编译器(如旧版Visual C++)允许$void\ main()$形式: ```c void main() { // 不符合C标准 printf("Non-standard form"); } ``` 但这种写法存在以下问题: 1. 违反ISO C标准,可移植性差 2. 无法通过$return$传递状态码给操作系统 3. 现代编译器(如GCC)会发出警告 ### 三、返回的作用 返回通过操作系统接收,例如在Linux中可通过$echo\ \$?$查看: ```bash ./a.out echo $? # 显示最后程序的返回 ``` 引用示例中的$atexit()$注册函数也能捕获返回[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值