函数:
函数是C语言中管理代码的最小单位,命名空间独立,栈空间独立。
函数被调用时开辟栈内存,函数结束后释放栈内存。
声明:返回值 函数名(类型1,类型2,...);
定义:返回值 函数名(类型1 参数名1,类型2 参数名2,...)
{
函数体
}
注意:函数的定义如果出现调用之前,声明可以忽略。调用函数时如果没有找到函数声明,也没有定义,编译器也不报错,而是先猜测函数的格式,链接时再尝试寻找函数的定义。
return 语句只是把数据存储一个特定的位置,当函数运行结束后,调用者就可以从这个位置获取到返回值。
函数有返回值(格式),而没写return语句,调用者会得到一个不确定返回值。
常见编译错误:
隐式声明函数‘sqrt’,没有找到函数声明和定义,编译时错误。
undefined reference to `sqrt',有函数声明,但无函数定义,链接时错误。
函数本质:
函数就存储在代码段中的一段数据(二进制指令的集合),函数名就是这段数据的开始位置。
因此函数名就是地址,可以定义指向这段数据的指针变量,这种指针叫函数指针。
返回值 (*函数指针) (类型1,类型2,...) ;
函数的传参:
1、只能值传递(内存拷贝),使用指针可提高效率(const int *)。
2、函数之间共享变量,全局变量(尽量少用),指针(注意安全)。
3、数组当作函数的参数时就脱变成了指针(长度丢失),额外增加一个参数传递数组长度。