在C语言中传递结构与向函数传递变量

在C语言中传递结构与向函数传递变量,c,function,struct,scope,structure,C,Function,Struct,Scope,Structure,为什么要在主功能之外定义结构,以便其他功能能够接收它们?我明白了,但是为什么在main函数中声明的普通变量(例如int和float)可以用作函数的参数,而不是main中定义的结构 (注:我问这个问题是因为我还没有足够的声誉来评论!)一个词:“范围” 如果在main()中定义了结构的类型,则类型的作用域为main。除了main之外,没有任何东西可以知道它。如果要将其传递给另一个函数,显然该函数必须知道该类型,但是如果该类型仅在main中已知,则该函数显然无法知道该类型 解决方案是什么?将类型的作用

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

(注:我问这个问题是因为我还没有足够的声誉来评论!)

一个词:“范围”

如果在
main()
中定义了结构的类型,则类型的作用域为
main
。除了
main
之外,没有任何东西可以知道它。如果要将其传递给另一个函数,显然该函数必须知道该类型,但是如果该类型仅在
main
中已知,则该函数显然无法知道该类型

解决方案是什么?将类型的作用域移动到main和“receiving”函数都能看到的地方

编辑:像
int
char
等内置类型已经具有全局范围,因此它们在任何地方都是已知的。这里我们要处理的是一个用户定义类型,它的范围根据定义的位置而受到限制


同样的规则也适用于变量(也称为类型的实例)-全局变量在任何地方都可见(我知道,您可以使用同名的局部变量“隐藏它”-不允许分割头发eh;-),但是
main()
中的局部变量只能在
main()中看到

您需要理解范围和基本数据类型的概念。结构不是基元类型,而是用户定义的结构,因此,如果您在给定范围内定义结构,则该范围外的程序将不知道该结构,因为是您定义的,因此它仅限于您定义它的范围。如(
int
float
char
)在该语言中定义,并为整个程序所知。如果它们在任何地方都不可用,那么实际上就不可能定义
main()
本身,因为

int main(void)
{
    return 0;
}
main()
的这个简单定义要求已经“定义”了
int


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

当您说“结构”时,您是指类型(使用
struct thingy{…stuff…};
)定义),还是指具有该类型的变量(使用
struct thingy myThingy;
)我指的是接收结构实例的函数,即具有该类型的变量。那么“如果其他函数具有结构类型,为什么不能将
main
中定义的变量传递给其他函数?”?答案是你可以!或者,如果您正在考虑在
main
中声明类型:差异的原因本质上是
int
float
没有在函数中声明。(就像在任何函数外声明的结构类型)是的,但我想知道为什么这适用于main中定义的普通变量(例如int x)。它们的作用域不应该仅限于main吗?它工作的原因是其他类型是内在的,例如,
char、short、int、long、double,
,所以每个人都知道them@Leponzo你把类型的作用域和变量的作用域搞混了。@Leponzo,看来你也把变量和类型的概念搞混了。像
int
这样的基本类型随处可见。但是在
main
(或任何函数)中声明的变量仅在
main
中可用-无论该变量是基类型还是结构。