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

时间:2015-12-22 02:54:07

标签: c function struct scope structure

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

(PS:我问过这个问题,因为我仍然没有足够的声誉来发表评论!)

2 个答案:

答案 0 :(得分:2)

一个词:“范围”。

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

解决方案?将类型的范围移动到主要和“接收”功能都可以看到它的位置。

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

相同的规则适用于变量(也就是类型的实例) - 全局变量在任何地方都可见(我知道,你可以用同名的本地“隐藏它” - 不要拆分eh ;-),但main()中的局部变量只能在main()内看到。

答案 1 :(得分:0)

您需要了解范围原始数据类型的概念。结构不是基本类型,而是用户定义的结构,因此如果您在给定范围内定义结构,那么该范围之外的程序将不知道该结构,因为您定义它是因为它限制在您执行的范围内定义它。 Primitive data types喜欢(intfloatchar)在语言中定义,并为整个程序所知。如果它们无处可用,那么实际上就无法定义main()本身,因为

int main(void)
{
    return 0;
}

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

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