1、函数的本质作用是实现代码的复用和可读性。
2、函数中[ ]的三种作用:
①声明变量时由[ ],表示声明的变量时数组变量;
②函数参数由[ ],此时表示指针;
③地址+[ ],表示下标运算。
3、参数列表
不需要传入参数,需要添加void,否则视为参数个数不确定,写了才表示不接受参数。
4、函数调用时如果只有函数名(比如Find)而没有加上(),那么实际上是在使用函数所占空间的首地址。另外,对函数名Find取地址&Find和Find是等价的。
函数调用的本质是:函数地址*(参数列表),函数名就是函数地址
5、函数声明
主函数里调用的函数,得在主函数之前就已经定义和声明,另外函数是不能嵌套的,只能在函数里调用其他函数。
函数声明的形式:函数头+;比如 void Plus(int a,int b);
作用:将函数声明放在开头后,函数的定义顺序不影响函数的调用,即使是当前调用的函数也可以在代码末尾编写函数体和定义功能。
注意点:
①防止互相调用或者调用自己从而导致死循环;
②函数声明后一定要有函数定义(也就是实现功能的代码段),否则无法调用;
③函数声明可以有多个,但是定义只能有一个。
7、return
return+一个参数 用于一个有返回值的函数,作用是终止函数。
return; 用于无返回值的函数,作用是终止函数。
return一次只能返回一个值,
return 4,5;的结果是返回了5,(a1,a2,a3....)这样由“,”隔开的多个参数构成的逗号表达式,最右端的参数有效。
但是return可以返回一个地址:
int *fun(void)
{
int *p=(int *)malloc(sizeof(int)*2);
*p=4;
p[1]=5; //等价于*(p+1)=5
return p;
}
int *a=fun();
free(a);
a[0],a[1]可以访问到返回的指针指向的两个int型参数。
注:不能返回一个栈区的空间,必须得用malloc申请堆区的局部地址空间。
因为栈区的作用域只在函数体内,函数调用结束时就会被释放,函数体外调用从而获得的返回值是非法访问,属于越界。