C 中函数之间的清晰度
Clarity between functions in C
我理解函数的概念,真的,但我想了解更多它们之间的区别。在 C:
中似乎有 4 种使用函数的变体
- 那些需要参数并且不return一个值
- 那些需要参数并做return一个值
- 那些不需要参数并且做return一个值
- 不需要参数并且不 return 值的那些(我主要在 BASH 脚本
中使用这些
我明白他们所做的一切,只是有点困惑。主要和前三个有关(我把最后一个简单了)。
程序员什么时候会使用前三个函数中的任何一个?我这里有几个使用结构的,但不确定为什么要这样写:
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()
。然后初始化一个结构变量,它 return 是一个值。现在无论何时我们调用这个函数,都不需要参数,我明白这一点。调用函数返回的是结果,即从键盘输入的任何内容。明白了。
然而,它下面的函数不采用任何类型定义,例如 print_emp()
之前的 struct employee
。也没有变量被初始化,也不需要 return 值。但是,它需要一个参数作为结构变量声明。为什么在这里而不是 read_emp()
?
read_emp()
函数是我列为编号 #3 的列表中的一个函数示例
print_emp()
函数是我列为数字 #1
的列表中的一个函数示例
列表#2 中的函数似乎也是不言自明的:这是我理解的一个例子:
float average(int n1, int n2, int n3)
{
return (n1 + n2 + n3) / 3;
}
这很容易理解,因为它有 3 个参数和 return 一个值。因此,当我们在 main() 中调用它时,它看起来像这样(假设 main 有另一个输入函数或部分,我们在其中读取用户键盘的 3 个数字:
average(num1, num2, num3);
我只是不明白为什么 read_emp()
没有参数而 return 有一个值,而 print_emp()
恰恰相反,并且将结构变量的声明作为参数。 read_emp()
为什么不这样做呢?任何帮助,将不胜感激。谢谢。
参数用于传递信息从程序调用函数的部分到函数。这通常是函数完成其工作所需的信息。 Return 值(其类型在函数名称之前声明)用于传递信息 从 函数 到 程序的一部分调用函数;这通常是函数计算的结果。
大多数函数都接受参数并具有 return 个值;这些函数非常灵活,因为它们可以在不需要用户交互或向用户显示任何内容的情况下使用(但如果您确实想向它们提供来自用户的信息或显示它们的结果,您可以在调用函数之前读取输入或在调用函数之后写入输出调用函数)。那些不带参数的将从程序外部获取信息(通过从键盘或文件读取输入)或从全局变量获取信息(或者它们可能根本不需要信息,因为它们每次都做同样的事情).那些没有 return 值的会将它们的结果发送到程序之外(通过将输出写入屏幕或文件)或将其存储在全局变量中。
我理解函数的概念,真的,但我想了解更多它们之间的区别。在 C:
中似乎有 4 种使用函数的变体- 那些需要参数并且不return一个值
- 那些需要参数并做return一个值
- 那些不需要参数并且做return一个值
- 不需要参数并且不 return 值的那些(我主要在 BASH 脚本 中使用这些
我明白他们所做的一切,只是有点困惑。主要和前三个有关(我把最后一个简单了)。
程序员什么时候会使用前三个函数中的任何一个?我这里有几个使用结构的,但不确定为什么要这样写:
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()
。然后初始化一个结构变量,它 return 是一个值。现在无论何时我们调用这个函数,都不需要参数,我明白这一点。调用函数返回的是结果,即从键盘输入的任何内容。明白了。
然而,它下面的函数不采用任何类型定义,例如 print_emp()
之前的 struct employee
。也没有变量被初始化,也不需要 return 值。但是,它需要一个参数作为结构变量声明。为什么在这里而不是 read_emp()
?
read_emp()
函数是我列为编号 #3 的列表中的一个函数示例
print_emp()
函数是我列为数字 #1
列表#2 中的函数似乎也是不言自明的:这是我理解的一个例子:
float average(int n1, int n2, int n3)
{
return (n1 + n2 + n3) / 3;
}
这很容易理解,因为它有 3 个参数和 return 一个值。因此,当我们在 main() 中调用它时,它看起来像这样(假设 main 有另一个输入函数或部分,我们在其中读取用户键盘的 3 个数字:
average(num1, num2, num3);
我只是不明白为什么 read_emp()
没有参数而 return 有一个值,而 print_emp()
恰恰相反,并且将结构变量的声明作为参数。 read_emp()
为什么不这样做呢?任何帮助,将不胜感激。谢谢。
参数用于传递信息从程序调用函数的部分到函数。这通常是函数完成其工作所需的信息。 Return 值(其类型在函数名称之前声明)用于传递信息 从 函数 到 程序的一部分调用函数;这通常是函数计算的结果。
大多数函数都接受参数并具有 return 个值;这些函数非常灵活,因为它们可以在不需要用户交互或向用户显示任何内容的情况下使用(但如果您确实想向它们提供来自用户的信息或显示它们的结果,您可以在调用函数之前读取输入或在调用函数之后写入输出调用函数)。那些不带参数的将从程序外部获取信息(通过从键盘或文件读取输入)或从全局变量获取信息(或者它们可能根本不需要信息,因为它们每次都做同样的事情).那些没有 return 值的会将它们的结果发送到程序之外(通过将输出写入屏幕或文件)或将其存储在全局变量中。