函数的调用
主调函数通过函数名调用被调函数,如果被调函数中有形参,则主函数中的函数调用语句须给出对应的实参;
调用格式:
函数名(实参表)
调用方式:
-
有返回值:
m=funMax(x,y); //表达式形式的调用 -
无返回值:
fun(a,b); //语句形式的调用
函数的声明
在主函数前声明函数,则函数的定义可以在所有地方调用
三个关键部分
- 函数的名字
- 函数返回值的类型
- 调用这个函数的时候必须提供的参数的个数和参数类型
语法格式
- 数据类型 函数名(形参列表);
函数重载
定义:在同一个作用域中,一组具有相同函数名,不同参数列表的函数
优点:减少函数名的数量,提高程序的可读性
其函数声明如下:
int sum(int a,int b) //求两个整数之和
{
return a+b;
}
int sum(int a,int b,int c) //求三个整数之和
{
return a+b+c;
}
double sum(double a,double b,double c) //求三个双精度数之和
{
return a+b+c;
}
默认形参值
使用带有默认形参值的函数时要注意:
- 指定默认值的参数必须放在形参列表中的最右端
void fun(int x=10,int y,int z); 错误!
void fun(int x,int y,int z=10); 正确
- 在函数调用之前需要有函数声明,此时函数声明中给出默认值,在函数定义时不能再给出默认值,即使默认值相同也不可以(即默认值只能给一次),当实参有另一个数时默认值更新为实参的数
例题:求2个或3个正整数中的最大数,用带有默认参数的函数实现
#include <iostream>
using namespace std;
int max(int a,int b,int c=0); //函数声明,形参c有默认值
int main()
{
int a,b,c;
cin>>a>>b>>c;
cout<<" max(a,b,c)=" <<max(a,b,c)<<endl; //输出3个数的最大值
cout<<" max(a,b)="<<max(a,b)<<endl;//输出2个数中的最大值
return 0;
}
int max(int a,int b,int c) //函数定义
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
return语句返回指针的情况
(这个部分听不懂!!!!)
输入个数不确定的学生成绩,返回存放成绩的首地址
#include <iostream>
using namespace std;
int *input(); //输入个数不确定的学生成绩,返回存放成绩的首地址
int *resize(int *p,int oldsize,int inc);
int main()
{
int *head,*p;
head=p=input();
while(*p>=0)
cout<<*(p++)<<endl;
return 0;
}
//输入学生的成绩,以-1结束
int *input()
{
int *p=NULL,c=0,i,x;
cout<<"输入学生的成绩,以-1结束";
cin>>x;
while(x>0){
p=resize(p,c,1);
*(p+c++)=x;
cin>>x;
}
p=resize(p,c,1);
*(p+c)=-1;
return p;
}
int *resize(int *p,int oldsize,int inc)
{
int *f,i;
if(inc==0)
return p;
else {
f=new int[oldsize+inc];
if(inc>0)
for(i=0;i<oldsize;i++)*(f+i)=*(p+i);
else
for(i=0;i<oldsize+inc;i++)*(f+i)=*(p+i);
}
delete[] p;
return f;
}
运行结果: