C++ 函数



C++ 中的函数

函数可以让我们模块化编程,在我们的代码中使用函数可以让人更容易理解、编辑、检查错误等。



在 C++ 中使用函数的基本语法

这是在 C++ 中定义函数的方法,

return-type function-name(parameter1, parameter2, ...)
{
    // 函数体
}
  • return-type:函数的返回类型,它可以是 int、char、一些指针,甚至是 ,也可以使用void什么都不返回。
  • Function Name: 是函数的名称,使用它被调用的函数名。
  • parameter是函数调用时传递的参数,也可以没有参数。
// 求和参数
void sum(int x, int y)
{
    int z;
    z = x + y;
    cout << z;
}

int main()
{
    int a = 10;
    int b = 20;
    // 使用sum调用函数
    sum (a, b);
}

上面的代码中,ab 是两个 变量,它们作为 参数 传递给函数 sum



声明、定义和调用函数

函数声明,是为了告诉编译器函数的存在。函数的返回类型、名称和参数上面已经讲过了,函数声明之后还要写函数的实现,即函数体,让我们通过一个例子来理解这一点。

#include < iostream>
using namespace std;

//声明函数
int sum (int x, int y);

int main()
{
    int a = 10;
    int b = 20;
    int c = sum (a, b);    //调用函数
    cout << c;
}

//实现函数
int sum (int x, int y)
{
    return (x + y);
}

上面的代码中,刚开始函数被声明,但没有函数体,然后我们在 main()函数内部调用它,该函数返回两个值的总和,变量 c 用于存储结果,通过定义函数体该函数被实现,当然我们也可以同时声明和定义函数,但是应该在调用它之前完成这一步,否则编译会报错。



调用函数

函数是通过函数名来调用的,如果该函数没有参数,则可以直接使用其名称调用它,但是对于带参数的函数,我们有两种调用方式:

  • 值传递
  • 指针传递
  • 引用传递


值传递

这种调用方式,我们将变量赋值给函数的参数,因此,原始值不变,只是给函数内部的参数赋了值。

void calc(int x);

int main()
{
    int x = 10;
    calc(x);
    printf("%d", x);
}

void calc(int x)
{
    x = x + 10 ;
}

以上实例输出结果:

10

在这种情况下,实际变量 x 没有改变,因为我们使用的是值传递,因此传递的其实是 x 的副本,该副本已更改,并且在退出函数时该副本被销毁,对原值没有任何影响,所以 main() 中的变量 x 的值仍然是 10。



指针传递

这种方式下我们将变量的地址作为参数传递,函数的参数是地址或指针,通过传递地址来更改原始变量的值。

void calc(int *p);

int main()
{
    int x = 10;
    calc(&x);     // 传递x的地址
    printf("%d", x);
}

void calc(int *p)
{
    *p = *p + 10;
}

以上实例输出结果:

20

上面这种方式是引用的指针,我们传递的是x的地址,通过指针来操作原始值。 注意: 如果你没有指针的知识,请先学习指针。



引用传递

c++中还可以使用引用传递来修改原始值,方法是在函数的参数中使用引用符号"&",然后我们在函数中的任何操作,实际上都是对原始值的操作,如下面这个示例:

void calc(int &x);

int main()
{
    int x = 10;
    calc(x);
    printf("%d", x);
}

void calc(int &x)
{
    x = x + 10 ;
}

以上实例输出结果:

20