1. 主页
  2. 文档
  3. C语言教程
  4. C语言函数
  5. C中的函数

C中的函数

函数是一组接受输入、进行特定计算并产生输出的语句。

这个想法是将一些常见或重复完成的任务放在一起并制作一个函数,这样我们就可以调用该函数,而不是为不同的输入一次又一次地编写相同的代码。

函数的一般形式是:

return_type function_name([ arg1_type arg1_name, ... ]) { code } 

示例:
下面是一个简单的 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;
}

输出:

m is 20

为什么我们需要函数?

  • 函数帮助我们减少代码冗余。如果功能在软件的多个位置执行,那么我们不会一次又一次地编写相同的代码,而是创建一个函数并在任何地方调用它。这也有助于维护,因为如果我们将来对功能进行更改,我们必须在一个地方进行更改。
  • 函数使代码模块化。考虑一个包含多行代码的大文件。如果将代码划分为函数,则代码的阅读和使用变得非常简单。
  • 函数提供抽象。例如,我们可以使用库函数而不用担心它们的内部工作。

函数声明
函数声明告诉编译器函数接受的参数数量、参数的数据类型和函数的返回类型。在函数声明中将参数名称放在函数声明中是可选的,但必须将它们放在定义中。下面是一个函数声明的例子。(下面的声明中没有参数名称)

// A function that takes two integers as parameters
// and returns an integer
int max(int, int);

// A function that takes an int pointer and an int variable as parameters
// and returns a 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 中,参数总是按值传递。例如。在下面的代码中,x 的值没有使用函数 fun() 修改。

#include <stdio.h>
void fun(int x)
{
x = 30;
}

int main(void)
{
int x = 20;
fun(x);
printf("x = %d", x);
return 0;
}

输出:

x = 20

但是,在 C 中,我们可以使用指针来获得传递引用的效果。例如,考虑下面的程序。函数 fun() 需要一个指向整数(或整数地址)的指针 ptr。它修改地址 ptr 处的值。解引用运算符 * 用于访问地址处的值。在语句’*ptr = 30’中,地址ptr的值被更改为30。地址运算符&用于获取任何数据类型的变量的地址。在函数调用语句“fun(&x)”中,传递了 x 的地址,以便可以使用它的地址修改 x。

#include <stdio.h>
void fun(int *ptr)
{
*ptr = 30;
}

int main()
{
int x = 20;
fun(&x);
printf("x = %d", 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 函数名();
在这种情况下,如果该函数的返回类型不同于 INT,编译器将显示错误。

main函数:
主函数是一个特殊函数。每个 C++ 程序都必须包含一个名为 main 的函数。它作为程序的入口点。计算机将从 main 函数的开头开始运行代码。

main函数类型:

1)第一种是不带参数的main函数:

// Without Parameters
int main()
{
...
return 0;
}

2)第二种是带参数的man函数:

// With Parameters
int main(int argc, char * const argv[])
{
...
return 0;
}

为 main 函数设置参数选项的原因是允许从命令行输入。

当您使用带参数的 main 函数时,它将程序名称后面的每组字符(由空格分隔)保存为名为 argv 的数组中的元素。

由于 main 函数的返回类型为 int,因此程序员必须始终在代码中包含 return 语句。返回的数字用于通知调用程序程序的执行结果是什么。返回 0 表示没有问题。

 

这篇文章对您有用吗?