函数
一、函数的定义:
1.语法形式
类型说明符 函数名(形参){
语句序列
}
举例
//计算x的n次方
double power(double x,int n){
double val=1.0;
while(n--)
val*=x;
return val;
}
2.函数的调用
函数在调用前需要声明,在调用函数之前,添加该函数的函数原型声明,格式:
类型说明符 函数名(形参);
嵌套调用:函数一调用函数二,函数二调用函数三,最后主函数调用函数一
递归调用:函数可以直接或者间接的调用自己,这就是递归
引用传递:&
创建一个引用,给它赋予形参的值,可以改变最终的实参的值
可以把引用传递看成是在对内存空间进行操作
例子
void swap(int &x,int &y){
//将传入的两个实参的值互换
int tmp=x;
x=y;
y=tmp;
}
int mian(){
int x=1,y=2;
cout<<"x="<<x<<"y="<<y<<endl;
swap(x,y);
cout<<"x="<<x<<"y="<<y<<endl;
return 0
}
二、内联函数
内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处
内联函数定义需要在函数体前加上 inline
inline 类型说明符 函数名(形参){
语句序列
}
内联函数要求语句序列比较简单,否则会造成代码膨胀,增大开销
带默认形参值的函数
函数在定义时可以预先声明默认的形参值
int add(int x=0,int y=1){
return x+y;
}
void main(){
add();//使用默认形参计算
add(1,2);//用实参初始化形参
add(1);//用部分实参初始化形参
}
在相同的作用域内,不允许在同一个函数的多个声明中对同一参数的默认值重复的定义,即使前后值不同也不行
三、函数重载
函数重载要求是函数名相同的情况下,形参的个数或者形参的类型不同,就是函数的重载
例子
int point(int x,int y);
int point(int x,int y,int z);
double point(double x,double y);
double point(double x,double y,double z);
四、内部函数
还有一些内部函数,先声明头文件,就可以直接调用,比如
先声明
# include <cmath>
然后可以调用
sin(); cos(); tan(); sqrt();等