一、函数传参:
1、值传递:
实参将值传递给形参,形参是实参的副本,对形参做的操作,实参不会受影响
使用传参的情况:
1.函数体内部想使用函数体外部变量值的时候可以使用值传递
2.函数体内想修改函数体外部变量的时候不能使用值传递
2、全局变量传递:
3、整形数组的传递:
1.形式1:
int fun(int array[5]);
2.形式2:
int fun(int array[], int len);
需要注意:
1.形式1只能操作5个元素的数组,形式2可以操作不同类型长度的数组
2.函数体内部的数组会随函数结束被回收,如果后续还想操作该数组必须在外部定义传到函数中
3.数组传递中,形参操作和实参操作的是同一个数组
4、字符型数组和字符串的传递
例如:char str[32] = {"hello world"};
int fun(char str[]);
二、递归函数
1、函数定义时调用函数本身
需要注意:
1.递归一定要有结束条件
2.避免深层次的递归
三、预处理命令
1、宏定义:
#define:只是代码的替换
1.不带参宏
#define PI 3.1415926
#define M 50
2.带参宏(宏函数)
带参宏与函数的区别:
1.函数有参数类型、返回值、传参的概念
2.带参宏没有参数类型、返回值、传参的概念
3.带参宏是在程序编译阶段加载到程序中
带参宏可能改变运算符的优先级,记得加括号
4.函数是在程序运行阶段加载到程序中
5.带参宏会使代码体积增大
6.函数不会使代码体积增大
7.带参宏执行效率高
8.函数执行效率低
2、头文件包含
#include <stdio.h>
在预处理阶段将stdio.h头文件展开到文件中
在/usr/include目录下查找stdio.h
#include "stdio.h"
在当前目录下查找stdio.h,如果当前目录找不到则在系统目录/usr/include目录下查找头文件
头文件以.h结尾:
1.头文件中存放宏定义
2.头文件中存放声明的全局变量和全局函数
3.头文件中存放自定义的数据类型
项目工程根据功能划分成不同的文件
jisuanqi ------- main.c 主函数的实现
|--- add.h add.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- add.c 加法相关的函数接口的实现
|--- sub.h sub.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- sub.c 减法相关的函数接口的实现
|--- mul.h mul.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- mul.c 乘法相关的函数接口的实现
|--- div.h div.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- div.c 除法相关的函数接口的实现
jisuanqi--------src ----- main.c 主函数的实现
| |--- add.c 加法相关的函数接口的实现
| |--- sub.c 减法相关的函数接口的实现
| |--- mul.c 乘法相关的函数接口的实现
| |--- div.c 除法相关的函数接口的实现
|
|----include ---- add.h add.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- sub.h sub.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- mul.h mul.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明
|--- div.h div.c中用到的数据类型的定义、宏定义、全局变量的声明、全局函数的声明