一、函数定义
<函数类型> <函数名>(形式参数表)
{
函数内容
}
形式参数是指这些参数实际上并不存在,只是在形式上代表运行时实际出现的参数。形式参数有如下特点:
1) 当被调用的函数有参数时,主调函数和被调用函数之间通过形参实现数据传递。
2) 函数的形参进在函数被调用时才由系统分配内存,用于接受主调函数传递来的实际参数。
#include <QCoreApplication>
int max(int x,int y)
{
return x>y?x:y;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int a = 10,b = 9;
int res = max(a,b); // a,b为实参
qDebug("%d",res);
return a.exec();
}
参数传统需要遵守的规则是,形参和实参个数必须相同,形参和实参的数据类型相同,形参和实参的顺序必须一一对应。
二、函数的参数传递方式
2.1 按值传递
按值传递也称传值,其传递形式是形参为普通变量,实参为表达式或变量,实参向形参赋值。
按值传递的特点是参数传递后,实参和形参不再有任何联系。需要注意的是,此时实参是表达式,故形参不可能给实参赋值。函数被调用时,系统为形参分配相应的存储单元,用于接受实参传递的数据。函数调用期间,形参和实参各自拥独立的存储丹云。函数电泳结束,系统回收分配给形参的存储单元。
传值调用的优点是函数调用对其外界的变量无影响,最多只能用return返回一个值,函数独立性强。
2.2 按引用传递
按引用传递又称传引用。引用即变量的别名,对别名的访问就是对别名所关联的访问,反之亦然,&称为引用符。
int i;
int &ai = i;// 定义int型引用ai是变量i的别名
ai = 15;//此时i的值也为15
使用引用应注意以下几点:
1) 定义引用时,应同时对它初始化,使它与一个类型相同的已有变量关联。
2) 一个引用与某变量关联;
3)引用主要用做函数的形参和返回值
#include <QCoreApplication>
int max(int &x,int &y)
{
return x>y?x:y;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int x = 10,y = 9;
int res = max(x,y); // x,y为实参
qDebug("%d",res);
return a.exec();
}
x是实参a的医用,y是实参b的引用,他们占用同一个内存单元,知识名称不同。引用的主要特点如下:
1) 高效的传递参数,避免了传值方式中的拷贝构造。引用传递实际上是传地址;
2) return语句最多返回一个值,而使用引用的形式可以修改多个实参变量的值;
2.3 按指针方式
指针传递本质上和值传递差不多,实际上是把实际的指针参数传递给函数中创建的形参指针。不同的地方在于,指针传递的情况时,可以通过再函数中通过形参指针的间址访问对实际变量做出更改,这是值传递无法做到的。
#include <QCoreApplication>
int max(int *x,int *y)
{
return *x>*y?*x:*y;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int x = 10,y = 9;
int res = max(&x,&y); // x,y为实参
qDebug("%d",res);
return a.exec();
}