什么是函数
函数是为了避免相同功能的代码重复书中写而将其提取为函数供调用的c语句的集合,需要该功能的时候,直接调用该函数即可,不用每次都堆叠一大堆的代码。需要修改该功能的时候,也只要修改和维护这一个函数即可。
函数包括3个部分:
1.函数名 具有唯一性(标准c不支持函数重载)
2.函数返回值 执行函数时通过return来将函数体内的值返回到函数外,可以通过调用函数获得(void 代表返回值为空)
3.函数形参 调用函数时传递进函数内的值,可供函数内c语句使用处理
形参与实参
形参 :函数声明和定义时函数明后括号内的值,用来将函数外的值传入函数内
实参 :函数调用时函数明后括号内的值,用来盛放函数外传进来的值,也就是实参的值
ps:形参与实参要对应
函数在主函数内的调用
在主函数中每调用一个函数都会为其分配一个栈帧,调用的函数的栈帧与为主函数分配的 栈区并不是物理相邻的,而是通过指针进行联系
函数执行到函数体结尾或者遇到return语句时,在跳出函数之前会先回收之前为函数分配的栈帧,这也就是为什么在调试的过程中当走到函数结尾时又跳到了函数前面声明临时变量的地方,因为临时变量是存放在栈里的,这时候跳到前面也就是在回收临时变量。
值传递和指针传递
值传递: 是指调用函数时使用的实参是值而不是地址,因为函数调用的机制问题,在调用函数时,会将实参的值复制一份放入寄存器中,之后在函数体内对形参的操作都是对复制后的值进行操作,所以这种操作并不会对实参起到影响。也就是说在函数体内改变了形参的值实参并不会在跟着改变。
指针传递:顾名思义,调用函数时实参是指针,那么初始化参数时复制过来的也是指针,这样在函数体内对形参进行修改时,就会到形参指针所指向的内存中找到对应的值然后修改,这样的话实参会跟着改变,因为形参存放的是从实参指针那里复制过来的地址,也就是说形参和实参指向的是同一块内存。