C语言函数笔记
笔记内容为自学郝斌老师C语言课程时所作
如果对于基础知识点有遗忘可以借鉴下
作者:
辽宁工业大学 电子202 宋家盛
如有错误, 可通过jff_16@163.com联系
函数:(C语言的基本单位)
为什么需要函数?
避免大量重复操作
有利于程序的模块化,将功能进行分类(面向过程思想的表现)
函数不是为某个数据设计的而是为过程设计的工具
(面向过程的思想)
什么叫函数?
逻辑上:能够完成特定功能的独立的代码块
物理上:1.能够接收数据[可以不接收]
2.能够对接收的数据进行处理
3.能够对数据处理的结果返回[可以不返回任何值]
总结:函数是个工具,它是为了解决大量类似问题而设计的
函数可以当作一个黑匣子(不需要理解内部处理操作,只需要会使用)
如何定义函数?
函数的返回值 函数的名字(函数的形参列表)
{
函数的执行体
}
1.函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体实现方法
2.return表达式的含义
return 和 break 的区别:
break 用来终止循环或者 switch
return 用来着终止被调函数,向主调函数返回表达式的值(表达式为空则不返回值)
3.函数返回值的类型也称为函数的类型,如果函数名前的返回值类型
和函数执行体中return返回的值不同,则以前者为准
例如:
void max(int i, int j) //max是函数的名字,i和j是形式参数(形参)
{ //void表示函数无返回值
if (i > j)
printf("%d\n", i);
else
printf("%d\n", j);
}
函数的分类
有参函数 和 无参函数
有返回值函数 和 无返回值函数
库函数 和 用户自定函数
值传递函数 和 地址传递函数(严格意义上这种说法不正确)
普通函数 和 主函数(main)
一个程序必须有且只能有一个主函数
主函数可以调用普通函数,普通函数不能调用主函数
普通函数可以相互调用
主函数是程序的入口也是程序的出口
如何调用函数?
max(a, b);
其中max是函数名,a和b为函数的实际参数(实参)
调用时将a发送给i,将b发送给j
多次调用时不能够保证每次分配的空间相同
当max函数调用完毕后,其占用的内存空间会被全部释放
(调用函数时,两个函数内部变量名不冲突)
函数的声明
void f(void); //函数声明,分号不能丢掉
函数声明的作用是使编译时知道f是个函数(无形参,无返回值)
如何在软件开发中合理的设计函数来解决实际问题:
1.注意代码的利用率,一个函数的功能尽量单一
2.多学习,多模仿牛人的代码
常用的系统函数:
double sqrt(double x); //求x的平方更
int abs(int x); //求x的绝对值
double fabs(double x) //求x的绝对值
递归:(专题 数据结构)[对于初学者不必须]
栈:所有可以实现先进后出的存储结构都是栈
压栈/出栈
变量的作用域和存储方式:
按作用域分:
全局变量:
在全部函数外部定义的变量统称为全局变量
使用范围:从定义位置开始到整个程序结束
局部变量:
在一个函数内部定义的变量或函数的形参都统称为局部变量
void f(int i)
{
int j;
}
//i和j都属于局部变量
使用范围:只能在本函数内部使用
注意问题:
全局变量和局部变量命名冲突问题
在一个函数内部如果定义的局部变量的名字和全局变量名字相同
则局部变量会屏蔽掉全局变量
按变量的储存方式分:
静态变量
自动变量
寄存器变量
使用函数应注意的问题:
1.函数的定义应在函数调用语句之前(函数之前的相互调用也遵循此原则)
如果函数调用写在了函数定义之前,则必须加函数前置声明
函数前置声明的作用:
1.告诉编译器可能出现的若干个字母时一个函数
2.告诉编译器可能出现的若干个字母代表的函数返回值和形参的具体情况
3.函数声明时一个语句,末尾必须加;
4.对库函数的声明是通过# include <库函数所在的文件名.h>来实现
2.形参和实参
形参和实参个数相同,位置一一对应,类型必须相互兼容
```