函数是一组语句,这些语句接受输入,进行一些特定的计算并产生输出。
这个想法是将一些通常或重复完成的任务放在一起并创建一个函数,这样我们就可以调用函数,而不是为不同的输入一次又一次地编写相同的代码。
函数的一般形式为:
return_type function_name([ arg1_type arg1_name, ... ]) { code }
例子:
下面是一个简单的C / C++程序来演示功能。
C
#include
// 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
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;
}
C
#include
void fun(int x)
{
x = 30;
}
int main(void)
{
int x = 20;
fun(x);
printf("x = %d", x);
return 0;
}
C++
#include
using namespace std;
void fun(int x) {
x = 30;
}
int main() {
int x = 20;
fun(x);
cout << "x = " << x;
return 0;
}
C
# include
void fun(int *ptr)
{
*ptr = 30;
}
int main()
{
int x = 20;
fun(&x);
printf("x = %d", x);
return 0;
}
C++
#include
using namespace std;
void fun(int *ptr)
{
*ptr = 30;
}
int main() {
int x = 20;
fun(&x);
cout << "x = " << x;
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中的值传递。例如。在下面的代码中,不使用fun()函数修改x的值。
C
#include
void fun(int x)
{
x = 30;
}
int main(void)
{
int x = 20;
fun(x);
printf("x = %d", x);
return 0;
}
C++
#include
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
void fun(int *ptr)
{
*ptr = 30;
}
int main()
{
int x = 20;
fun(&x);
printf("x = %d", x);
return 0;
}
C++
#include
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()这样的函数不是一个好主意。要声明只能不带任何参数调用的函数,我们应该使用“无效的乐趣(无效)”。
作为边注,在C++中,空的列表的装置函数只能被称为不带任何参数。在C++中,void fun()和void fun(void)相同。
5)如果在C程序中,在声明函数之前调用了一个函数,则C编译器将自动采用以下方式假定该函数的声明:
int函数名称();
在那种情况下,如果该函数的返回类型与INT不同,则编译器将显示错误。
主要函数:
主要函数是特殊函数。每个C++程序都必须包含一个名为main的函数。它充当程序的入口点。计算机将从主要函数的开头开始运行代码。
主要函数类型:
1)第一种类型是–不带参数的主要函数:
// Without Parameters
int main()
{
...
return 0;
}
2)第二类是具有参数的主要函数:
// With Parameters
int main(int argc, char * const argv[])
{
...
return 0;
}
主函数具有参数选项的原因是允许从命令行输入。
当您将main函数与参数一起使用时,它将程序名之后的每组字符(用空格分隔)保存为名为argv的数组中的元素。
由于main函数的返回类型为int,因此程序员在代码中必须始终具有return语句。返回的数字用于通知调用程序该程序执行的结果是什么。返回0表示没有问题。