为什么要在主函数之外定义结构以使其他函数能够接收它们?我理解this answer,但为什么在main函数中声明的普通变量(例如int和float)可以用作函数的参数而不是main中定义的结构?
(PS:我问过这个问题,因为我仍然没有足够的声誉来发表评论!)
答案 0 :(得分:2)
一个词:“范围”。
如果您的结构类型已定义在main()
中,则类型的范围为main
。 main
之外的任何内容都无法知道。如果你想将它传递给另一个函数,显然该函数必须知道类型,但如果只在main
中知道该类型,那么显然该函数无法知道它。
解决方案?将类型的范围移动到主要和“接收”功能都可以看到它的位置。
编辑:内置类型如int
,char
等已经具有全局范围,因此它们随处可见。我们在这里处理的是用户定义类型,其范围根据定义的位置而受到限制。
相同的规则适用于变量(也就是类型的实例) - 全局变量在任何地方都可见(我知道,你可以用同名的本地“隐藏它” - 不要拆分eh ;-),但main()
中的局部变量只能在main()
内看到。
答案 1 :(得分:0)
您需要了解范围和原始数据类型的概念。结构不是基本类型,而是用户定义的结构,因此如果您在给定范围内定义结构,那么该范围之外的程序将不知道该结构,因为您定义它是因为它限制在您执行的范围内定义它。 Primitive data types喜欢(int
,float
,char
)在语言中定义,并为整个程序所知。如果它们无处可用,那么实际上就无法定义main()
本身,因为
int main(void)
{
return 0;
}
这个main()
的简单定义要求int
已经“定义”。
最后,为了能够定义结构,您还需要这些基本类型,因为您将结构定义为包含一个或多个这些基元的对象。您当然可以使用先前定义的结构作为结构的成员等。