A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王元18611727076 中级黑马   /  2015-10-25 22:50  /  718 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

------函数的概念
完成特定功能的代码段,它也是组成我们C语言源程序的基本单位
优点:
1)提高程序的可读性, 2)可以提高开发的效率 3)提高代码重用性

函数的分类:
库函数,用户定义函数,有无返回值,有无参数

4.、函数定义到使用分三步:

1、声明。2、定义函数。3、调用函数。

---------------------函数的定义
格式:
返回值 函数名(形参列表){
    函数体;
    return
}

命名规则:
1、只能由字母、数字、下划线或者美元符号($)组成
2、不能以数字开头
3、不能与关键字重名
4、严格区分大小写


4种

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

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

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

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

理解:
有返回值,说明,主函数调用之后,要赋值给某个变量,或者这个返回值有用途

函数名不能重名

------------------------函数的参数

区分形参和实参
-----形参
形参:在定义函数的时候,函数名后面小括号中的参数

格式: 数据类型 变量 如:int x;

形式参数是什么样类型的数据,那么实际参数也必须是什么样的类型

形参变量只有在被调用时才分配内存单元

形参的作用域:只能在本函数中使用

在函数中,不能定义和形参同名的变量

-----实参
调用函数的时候传递的参数  可以是变量,也可以是常量,也可是是表达式,还能是函数
无论实参是何种类型的量,在进行函数调用时,它 们都必须具有确定的值,以便把这些值传送给形参。
因此应预先用赋值,输入等办法使实参获得确定值。


形参和实参的功能是作数值的传递。
发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主 调函数向被调函数的数据传送。


实参和形参在  数量上  ,  类型上  ,顺序上   应严格一致,否则会发生类型不匹配”的错误。

知道什么是主调函数,什么是被调函数



------------------------------函数的返回值

函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。

被调函数返回给主调函数的值

主调函数:A B两个函数 ,如果在A中调用了B,A叫主调函数,B被调函数
return:被调函数返回给主调函数的值
函数的返回值使用return 关键字进行返回
1) return a+b; return a>b?a:b;   可以是值也可以是表达式
2) 如果函数的返回值类型是void  可以写return;  表示程序返回了,不再向下执行
4) 函数中可以有多个return ,但是只有一个起作用
5)函数定义的返回值类型与return的值类型不一致,以定义的函数类型为准
6)如果函数是整型,可以忽略返回值类型

sum(int a,int b){   //习惯不要这么写
    return a+b;
}

int sum(int a,int b){
    return a+b;
}

--------------------------函数的声明
1)函数的声明:
为什么要进行声明?
类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经

定义了某个函数,为了防止编译器编译的时候报错(函数调用)

所以,要告诉编译器,我已经定义了哪些函数

用法:
返回值类型 被调函数名( 类型 形参, 类型 形参... );
返回值类型 被调函数名( 类型, 类型...);
如:
int max( int a, int b );
int max( int, int );  //习惯不要这么写

注意点:
1/如果被调函数的返回值是int类型,此时可以不用声明
2/如果被调函数写在主调函数之前,此时可以不用声明
3/可以全局声明,也可能在主函数里面声明

4/声明可以值只有参数类型
int sum(int);
int sum(int num);

原则:
在调用函数之前,进行该函数的声明
声明的方法:
技巧:复制函数的头部,加上分号,写在调用调用方法之前 int max(int x,int y); //声明



--------------------函数的调用

max(56,78); //调用
函数的调用
函数名(实参列表);


#waring C语言中允许函数嵌套调用,但是不允许作嵌套的函
-----------C语言的头文件

以.h结尾的文件,如同stdio.h

头文件里面是什么?   --->   函数的声明

引用自定义的头文件 :
#include "xxx"

系统自带的头文件 :
#include <stdio.h>

注意点:
1.头文件中只做声明,不做实现
2.自定义头文件的时候要注意放在同一目录下,否则需要引入具体路径
-------------#include指令
#include " "
包含的是一个用户定义的文件,可以是头文件,也可是普通文件
1、在当前文件所在的路径下查找
2、如果上面没有找到,到编译器include路径查找
3、如果编译器include路径下没有找到,系统的include路径下查找
4、如果上面三个都没有找到就报错了。
当前文件夹 ----->编译器include ---->系统include----->(如果找不到)报错
#include <>
包含一个系统(编译器自带)的头文件
1、编译器的include路径下查找
2、如果没有找到就系统include路径下查找
3、如果都没有找到就报错

编译器include ---> 系统include--> (如果找不到)报错

include 不一定非要写在第一行


Xcode自带编译器 :
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/

Mac系统的include路径有:
/usr/include /usr/local/include




------------C语言模块化编程思想
所谓模块化编程(多文件开发),就是多文件(.c文件)编程,一个 .c 文件和一个 .h 文 件可以被称为一个模块。

概念:把相同功能相似的函数封装到不同的文件中

好处:
a.只需要包含.h文件,对外隐藏源文件的实现。
b.方便团队分工和协作
c.可以将不同的功能分装在不同的模块中,方便调用。

1)通过头文件来调用库功能。
2)多文件编译。
3)头文件能加强类型安全检查。


声明在 .h中, 实现在 .c 中


.h  .c名字必须一样

注意:
1)为了更好的组织各个文件,一般情况下一个 .c 文件对应一个 .h 文件,并且文件名要相同, 例如 calculator.h 和 calculator.c。
2)可以声明函数,但是不可以定义函数

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马