传递结构与传递变量给 C 中的函数

Passing Structures vs Passing Variables to a Function in C

为什么要在主函数之外定义结构以便其他函数能够接收它们?我理解,但为什么在 main 函数中声明的普通变量(例如 int 和 float)可以用作函数的参数而不是在 main 中定义的结构?

(PS: 我问这个问题是因为我还没有足够的声望来发表评论!)

一个字:"Scope".

如果您的结构类型定义在 main() 中,则该类型的范围是 mainmain 之外的任何人都无法知道。如果你想把它传递给另一个函数,显然那个函数必须知道类型,但是如果类型只在 main 中已知那么显然函数不能知道它。

解决办法?将类型的范围移动到 main 和 "receiving" 函数都可以看到的地方。

编辑:intchar 等内置类型已经具有全局范围,因此它们随处可见。我们在这里处理的是一个用户定义类型,其范围根据定义的位置而受到限制。

相同的规则适用于变量(又名类型的实例)- 全局变量在任何地方都可见(我知道,您可以 "hide it" 使用同名的本地变量 - 别乱说哦; -), 但是main()中的局部变量只能在main().

中看到

您需要了解作用域原始数据类型的概念。结构不是原始类型,而是用户定义的构造,因此如果您在给定范围内定义结构,则该范围外的程序将不知道该结构,因为是您定义了它,因此它仅限于您所做的范围定义它。 Primitive data types like (int, float, char) 在语言中定义并且为整个程序所知。如果它们不是随处可用,实际上就不可能定义 main() 本身,因为

int main(void)
{
    return 0;
}

main() 的这个简单定义要求 int 已经“定义”。

最后,为了能够定义结构,您还需要这些基本类型,因为您将结构定义为包含一个或多个这些基本类型的对象。您当然可以使用以前定义的结构作为结构的成员等。