函 数
(一)
参数:当函数想使用主函数中的变量时,则
将主函数中的变量作为参数传递给函
数内部
返回值:当主函数想使用函数中的变量或者
数据时,则将函数内部的数据或变量
作为返回值返回给主函数使用
1.函数的传参
1.复制传递
实参将值复制一份并给相应的形参
对形参的操作和实参没有任何关系
2.地址传递
如果函数体内部想操作主函数中的
变量,则把主函数的地址传递给函
数
3.全局变量传递
4.整型数组的传递
1.int fun(int * a, int len)
传递数组首地址和数组长度
2.int fun(int a[], int len)
传递数组名和数组长度
maopao_input();
maopao_order();
maopao_output();
5.结构体的传递
typedef作用:
给数据类型定义一个别名
6.字符数组的传递
字符数组只需传递数组名,不需要传递
字符数组的长度,因为字符数组中保存
着用于标识字符串结尾的'\0'字符
7.总结
1.实参的类型决定形参的类型
2.函数的功能决定实参传入的个数
3.函数的返回值类型是由return
后面的数据类型决定的
4.功能决定函数的返回值
zhangsan;m;1000;90
2.函数指针和指针函数
1.函数指针是一个指针,这个指针指向
一个函数的地址
char (*fun)(int a, int b);
2.指针函数是一个函数,这个函数的返
回值是一个指针
char *fun(int a, int b);
(二)
1.主函数的传参
int main(void);
int main(int argc, char *argv[]);
1.argc:
传入参数的个数(1 - n)
2.argv:
1.指针数组,每个数组元素保存传入主函数
的字符串首地址
2.通过argv[0],argv[1] ... argv[n]利用
%s的形式输出第1个,第2个 ... 第n个字
符串
2.宏函数
#define MAX(a,b) a>b?a:b
宏函数和函数的区别:
1.宏函数没有参数类型的概念,并且只是完成
程序的简单替换
2.宏函数是代码的简单替换,所以程序会变长
增加存储空间
3.宏函数相比于函数是代码替换,执行效率比
较高
4.函数是在链接时处理的代码,函数的执行需
要有参数传递,和压栈出栈的操作
5.函数的使用能够节省存储空间,但是因为需
要压栈和出栈操作所以执行效率不高
内存管理
环境变量及系统参数区
堆区
栈区
数据区
常量区
初始化静态变量区
未初始化静态变量区
文本区
数据区:
1.保存常量
2.保存静态变量 static int a
3.保存全局变量
栈区:
1.操作系统自动管理的区域(申请,释放内存)
2.栈区通常用来存放局部变量
3.栈区中的数据未经初始化之前是随机值
堆区:
1.程序员手动管理的内存区域(申请,释放)
申请malloc stdlib.h
释放free stdlib.h
2.堆区中的数据一旦使用malloc函数申请,在没有
经过free函数的释放之前不能被操作系统回收
资源
C语言中有2种方式获得内存
1.定义变量 可以通过指针和变量名
2.malloc 只能通过指针来操作