函数可以让我们模块化编程,在我们的代码中使用函数可以让人更容易理解、编辑、检查错误等。
这是在 C++ 中定义函数的方法,
return-type function-name(parameter1, parameter2, ...)
{
// 函数体
}
// 求和参数
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);
}
上面的代码中,a
和 b
是两个 变量,它们作为 参数 传递给函数 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