函数是一组语句,这些语句接受输入,进行一些特定的计算并产生输出。
我们的想法是将一些通常或重复执行的任务放在一起并创建一个函数,这样我们就可以调用该函数,而不是为不同的输入一次又一次地编写相同的代码。
例:
下面是一个简单的C /C++程序来演示函数。
C
#include <stdio.h>
// An example function that takes two parameters 'x' and 'y'
// as input and returns max of two input numbers
int max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
// main function that doesn't receive any parameter and
// returns integer.
int main(void)
{
int a = 10, b = 20;
// Calling above function to find max of 'a' and 'b'
int m = max(a, b);
printf("m is %d", m);
return 0;
}
C++
#include <iostream>
using namespace std;
int max(int x, int y)
{
if (x > y)
return x;
else
return y;
}
int main() {
int a = 10, b = 20;
// Calling above function to find max of 'a' and 'b'
int m = max(a, b);
cout << "m is " << m;
return 0;
}
输出:
m is 20
我们为什么需要函数?
- 函数可以帮助我们减少代码冗余。如果函数是在软件中的多个位置执行的,则不是一次又一次地编写相同的代码,而是创建一个函数并在任何地方调用它。这也有助于维护,因为如果将来对函数进行更改,则必须在一处进行更改。
- 函数使代码模块化。考虑一个具有多行代码的大文件。如果将代码划分为函数,那么阅读和使用代码将变得非常简单。
- 函数提供抽象。例如,我们可以使用库函数而不必担心它们的内部工作。
函数声明
函数声明告诉编译器函数需要使用的参数数量,参数的数据类型和函数的返回类型。在函数声明中将参数名称放在函数声明中是可选的,但有必要将其放入定义中。以下是函数声明的示例。 (以下声明中没有参数名称)
// A function that takes two integers as parameters
// and returns an integer
int max(int, int);
// A function that takes a int pointer and an int variable as parameters
// and returns an pointer of type int
int *swap(int*,int);
// A function that takes a charas parameters
// and returns an reference variable
char *call(char b);
// A function that takes a char and an int as parameters
// and returns an integer
int fun(char, int);
始终建议在使用函数之前先声明一个函数(有关详细信息,请参见此,此和此)。
在C语言中,我们可以在同一位置进行声明和定义,就像在上面的示例程序中一样。
C还允许分别声明和定义函数,这在库函数的情况下尤其需要。库函数在头文件中声明,并在库文件中定义。以下是示例声明。
参数传递给函数
传递给函数的参数称为实际参数。例如,在上面的程序10和20是实际参数。
函数接收的参数称为形式参数。例如,在上面的程序中,x和y是形式参数。
有两种最流行的传递参数的方法。
按值传递:在这种参数传递方法中,将实际参数的值复制到函数的形式参数中,并将两种类型的参数存储在不同的存储位置中。因此,函数内部所做的任何更改都不会反映在调用者的实际参数中。
通过引用传递实际参数和形式参数都指向相同的位置,因此函数内部所做的任何更改实际上都会反映在调用者的实际参数中。
在C语言中,参数始终按值传递。参数始终按C中的值传递。例如。在下面的代码中,使用函数fun()不会修改x的值。
C
#include <stdio.h>
void fun(int x)
{
x = 30;
}
int main(void)
{
int x = 20;
fun(x);
printf("x = %d", x);
return 0;
}
C++
#include <iostream>
using namespace std;
void fun(int x) {
x = 30;
}
int main() {
int x = 20;
fun(x);
cout << "x = " << x;
return 0;
}
输出:
x = 20
但是,在C语言中,我们可以使用指针来获得按引用传递的效果。例如,考虑以下程序。函数fun()需要指向整数(或整数地址)的指针ptr。它修改地址ptr上的值。取消引用运算符*用于访问地址中的值。在语句“ * ptr = 30”中,地址ptr的值更改为30。地址运算符&用于获取任何数据类型的变量的地址。在函数调用语句“ fun(&x)”中,传递了x的地址,以便可以使用x的地址对其进行修改。
C
# include <stdio.h>
void fun(int *ptr)
{
*ptr = 30;
}
int main()
{
int x = 20;
fun(&x);
printf("x = %d", x);
return 0;
}
C++
#include <iostream>
using namespace std;
void fun(int *ptr)
{
*ptr = 30;
}
int main() {
int x = 20;
fun(&x);
cout << "x = " << x;
return 0;
}
输出:
x = 30
以下是有关C函数的一些重要要点。
1)每个C程序都有一个称为main()的函数,当用户运行该程序时,操作系统会调用该函数。
2)每个函数都有一个返回类型。如果函数不返回任何值,则将void用作返回类型。而且,如果函数的返回类型为void,我们仍然可以在函数定义的主体中使用return语句,方法是不指定常数,变量等,而只需提及“ return;”语句即可,终止函数如下图:
void function name(int a)
{
....... //Function Body
return; //Function execution would get terminated
}
3)在C语言中,函数可以返回除数组和函数之外的任何类型。我们可以通过返回指向数组的指针或指向函数的指针来解决此限制。
4)C中的参数列表为空表示未指定参数列表,并且可以使用任何参数调用函数。在C语言中,声明像fun()这样的函数不是一个好主意。要声明只能不带任何参数调用的函数,我们应使用“ void fun(void)”。
附带说明一下,在C++中,空列表意味着只能在没有任何参数的情况下调用函数。在C++中,void fun()和void fun(void)都是相同的。
5)如果在C程序中,在声明函数之前调用了函数,则C编译器将通过以下方式自动采用该函数的声明:
int函数name();
在这种情况下,如果该函数的返回类型与INT不同,则编译器将显示错误。
相关用法
注:本文由纯净天空筛选整理自 Functions in C/C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。