我确实理解函数的概念,但我想了解它们之间的更多差异。在 C 中使用函数似乎有 4 种变体:
- 那些需要参数并且不返回值的
- 那些需要参数并返回值的
- 那些不需要参数并且返回值的
- 那些不需要参数并且不返回值的(我主要在 BASH 脚本中使用过这些
我明白他们所有人的作用,但只是有点困惑。它主要与前 3 个有关(我得到最后一个,因为它很简单)。
程序员什么时候会使用前三个函数中的任何一个?我这里有一些使用结构,但只是不确定为什么它们是这样写的:
struct employee read_emp()
{
struct employee x;
printf("Please enter the address: ");
scanf("%s", &x.address);
return x;
}
print_emp(struct employee y)
{
printf("Address is %s\n", y.address);
}
那么它的调用方式是这样的:
main()
{
struct employee emp1, emp2;
emp1 = read_emp();
print_emp(emp1);
}
因此,print_emp()
函数使用另一个函数作为参数,即read_emp()
函数。这让我很困惑。第一个函数 read_amp() 不带任何参数,但需要在定义它之前定义一个类型,如下所示:struct employee read_emp()
。然后初始化一个结构变量并返回一个值。现在每当我们调用这个函数时,都不需要参数,我明白这一点。调用该函数返回的将是结果,即从键盘输入的内容。明白了。
但是,它下面的函数在 print_emp()
之前不接受任何类型定义,例如 structEmployee
。此外,没有变量被初始化,也不需要返回值。但是,它需要一个参数作为结构变量声明。为什么在这里而不是在 read_emp()
中?
read_emp()
函数是我在编号#3 中提到的列表中的一个函数示例
print_emp()
函数是我在编号 #1 中注明的列表中的一个函数示例
列表#2 中的函数似乎也是不言自明的:这是我理解的一个示例:
float average(int n1, int n2, int n3)
{
return (n1 + n2 + n3) / 3;
}
这很容易理解,因为它需要 3 个参数并返回一个值。因此,当我们在 main() 中调用它时,它看起来像这样(假设 main 有另一个输入函数或部分,我们在其中读取用户键盘的 3 个数字:
average(num1, num2, num3);
我只是不明白为什么 read_emp()
不接受任何参数并返回一个值,而 print_emp()
则相反,并接受一个声明作为参数结构变量。为什么 read_emp()
不这样做呢?任何帮助,将不胜感激。谢谢。
最佳答案
参数用于将信息从调用函数的程序部分传递到函数。这通常是该功能完成其工作所需的信息。返回值(其类型在函数名称之前声明)用于将信息从函数传递到调用该函数的程序部分;这通常是函数计算的结果。
大多数函数都带有参数并且有返回值;这些函数非常灵活,因为它们可以在不需要用户交互或向用户显示任何内容的情况下使用(但如果您确实想向用户提供信息或显示其结果,您可以在调用函数之前读取输入或在调用函数之后写入输出调用该函数)。那些不带参数的程序要么从程序外部获取信息(通过从键盘或文件读取输入),要么从全局变量获取信息(或者它们可能根本不需要信息,因为它们每次都做同样的事情) )。那些没有返回值的程序会将其结果发送到程序之外(通过将输出写入屏幕或文件)或将其存储在全局变量中。
关于C 函数之间的清晰性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28757600/