函数 (C语言学习的第二个重点)
为什么需要函数
避免了重复性操作
有利于程序的模块化
什么叫函数
逻辑上:能够完成特定功能的独立的代码单元
物理上:能够接收数据[当然也可以不接受数据];能够对接收的数据进行处理;能够将数据处理的结果返回[当然也可以不返回值]
总结:函数是个工具,它是为了解决大量类似问题而设计的,函数可以当作一个黑匣子,将内部如何处理数据的代码封装起来
如何定义函数
函数的返回值 函数的名字(函数的形参列表)
{
函数的执行体
}
1. 函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体实现方法
2. return 表达式的含义:
1. 终止被调函数,向主调函数返回表达式的值
2. 如果表达式为空,则只终止函数,不向被调函数返回任何值
3. break 是用来终止循环和switch的,return是用来终止函数的
例子:
void f()
{
return;//只用来终止函数,不向被调函数返回任何值
}
int f()
{
return 10;//1. 用来终止被调函数;2. 向主调函数返回10
}
int f()
{
return ;//这个写法语法上没有错误,但是返回的是一个垃圾值
}
3. 函数返回值的类型也称为函数的类型,如果函数名前面的返回值类型和函数执行体中的 return 表达式中的类型不同的话,则最终函数返回的类型,以函数名前面的返回值类型为准
例子:
int f()
{
return 10.5;//因为函数的返回值类型为int,所以最终f返回的值是10而不是10.5
}
函数的分类
有参函数 和 无参函数
有返回值 和 无返回值函数
库函数 和 用户自定义函数
值传递函数 和 地址传递函数
普通函数 和 主函数(main函数)
一个程序必须有且只能有一个主函数
主函数可以调用普通函数,普通函数不能调通主函数
普通函数可以相互调用
主函数是程序的入口也是程序的出口
注意的问题
函数调用和函数定义的顺序
如果函数调用写在了函数定义的前面,则必须加函数的前置声明
函数前置声明的作用:
1. 告诉编译器即将可能出现的若干个字母代表的是一个函数
2. 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
3. 函数声明是一个语句,末尾必须加分号
4. 对库函数的声明是通过 #include <库函数所在的文件的名字.h>来实现的
形参和实参
形参:函数定义时写的参数
实参:函数调用时用到的参数
形参和实参必须一一对应,包括个数,位置,数据类型等等
如何在软件开发中合理的设计函数来解决实际问题
一个函数的功能尽量独立,单一
多学习,多模仿牛人的代码
函数是C语言的基本单位,类是Java,C#, C++的基本单位
常用的系统函数
专题:
递归
变量的作用域和存储方式:
/* 示例代码 函数的定义
* 时间 2015-8-8 11:51
*/
# include <stdio.h>
//第一个void该函数没有返回值;第二个void表示该函数没有参数,即函数不允许接收数据,此时函数也可以写成
//void f1()这个形式,即,函数的类型必须要有,函数的参数如果是没有参数的情况下可以省略不写
//但是推荐使用 void f1(void) 的形式,这样代码看起来比较规范
void f1(void)
{
printf("这是一个无参函数,同时也是一个无返回值函数\n");
}
// 第一个int表示该函数的返回值是int类型的数据,括号里面的int表示该函数参数的类型是int类型,此时函数有参数,允许接收数据,所以必须要将参数写出来
int add1(int i, int j)
{
int z;
z = i + j;
return z; //这是一个return表达式,当函数的返回值不为void时,必须要写return,return表示将向主调函数返回z
}
int main()
{
int a;
f1();
a = add1(3, 5);
printf("a = %d\n", a);
system("pause");
return 0;
}
/* 示例代码 return返回值的用法
* 时间 2015-8-8 12:34
*/
# include <stdio.h>
int f1() //函数的返回值是 int 类型
{
return 10.5; //return 表达式返回的值是float,但是因为函数的返回值类型是int,所以最终 f 返回的值是 10 而不是 10.5
}
int main()
{
float i;
i = f1();
printf("%f\n", i);
system("pause");
return 0;
}
/*
结果:
---------------------------
10.000000
请按任意键继续. . .
---------------------------
*/
/* 示例代码 break和return的区别
* 时间 2015-8-8 14:43
*/
# include <stdio.h>
void f1()
{
int i;
for (i = 0; i < 5; i++)
{
printf("AAAA\n");
//break; //break只是终止for循环,所以后面的 BBBB 还是会输出
return; //return终止 整个 f1 函数,所以 BBBB 不会输出
}
printf("BBBB\n");
}
int main()
{
f1();
system("pause");
return 0;
}
/*
结果输出:
-----------------------
break:
AAAA
BBBB
请按任意键继续. . .
return:
AAAA
请按任意键继续. . .
-----------------------
*/
联系客服