这篇介绍一下C/C++中的函数,主要是函数指针和传参(在文章的后半部分)相关的讨论
如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢
函数的作用主要是为了方便代码复用
0. 函数调用
- 函数调用的本质:函数地址+(参数列表)
- 函数名与数组名的作用类似,一个函数为 void fun(int a); 通过fun(a); 或者&fun(a); 都可以成功调用函数,也就是说函数名或者是对函数名取地址意义是一样的
- 在C中,函数如不接受任何参数,必须在函数的参数列表处写void,函数列表啥也不写表示参数个数不能确定
- 在C++中,参数列表啥也不写默认是void,不接受任何参数,函数的调用跟C是一样的
1. 函数声明
- 函数可以不声明,直接定义在主函数前面,这样可以被主函数正常调用,但是如果定义的函数去调用其他的自定义函数,就要注意函数的位置,函数只能调用定义在它前面的函数,不能调用定义在它后面的函数,这样的话,定义函数还要考虑它们定义的位置就比较麻烦了,所以声明函数就可以解决这个问题,声明可以写在所有函数的前面,也可以写在其他位置,但是如果声明在其它位置,那么这个函数还是不能被自由的调用,声明也就失去了它的意义,所以最好是将函数的声明写在所有函数的前面
2. 函数返回指针
- 函数的返回类型如果是指针变量,这个指针变量指向的空间一般应该是堆区的地址空间,因为如果返回的是指向栈区空间的指针,在函数执行结束后,这个栈区空间(局部变量)有可能生命周期已经结束,被系统释放掉了,虽然有时候可以正确访问到数据,但是很容易造成访问野指针的错误,因此,最好是返回指向堆区地址的指针,需要注意的一点是,返回堆区地址的指针用完之后,记得要释放掉,避免造成内存泄漏
3. 函数类型
- 函数的类型是由返回值类型,参数类型和参数数量确定的
- 如函数原型是void fun(int a, double b){ ; } 这样的,它的声明可以写成void fun(int, double); 这条语句表明了函数的返回值类型,参数类型和参数数量可以确定一个函数的类型
int fun(int a, double b) {
cout<< a << " " << b <<endl;
return 0;