深入浅出之函数

一、函数定义

     <函数类型> <函数名>(形式参数表)

{

    函数内容

}

形式参数是指这些参数实际上并不存在,只是在形式上代表运行时实际出现的参数。形式参数有如下特点:

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();
}

三、变量的存储类型

四、预处理

发布了73 篇原创文章 · 获赞 269 · 访问量 87万+

猜你喜欢

转载自blog.csdn.net/a8039974/article/details/104076930