爲什麼應該在主函數之外定義結構以便其他函數能夠接收它們?我明白了this answer,但爲什麼在main函數中聲明的普通變量(例如int和float)可能被用作函數的參數,而不是主函數中定義的結構呢?傳遞結構與將變量傳遞給函數C
(PS:我問這個問題,因爲我還沒有足夠的信譽評論)
爲什麼應該在主函數之外定義結構以便其他函數能夠接收它們?我明白了this answer,但爲什麼在main函數中聲明的普通變量(例如int和float)可能被用作函數的參數,而不是主函數中定義的結構呢?傳遞結構與將變量傳遞給函數C
(PS:我問這個問題,因爲我還沒有足夠的信譽評論)
一個字:「範圍」。
如果你的結構類型定義在main()
那麼類型的範圍是main
。 main
之外沒有什麼可以知道它。如果你想將它傳遞給另一個函數,很明顯這個函數必須知道類型,但是如果僅在main
中知道該類型,那麼顯然該函數無法知道它。
解決方案?將類型的範圍移到main和「receiving」函數都可以看到的地方。
編輯:內置類型如int
,char
等已經具有全球範圍,所以他們都知道無處不在。我們在這裏處理的是一個用戶定義類型,其範圍根據其定義的位置而受到限制。 (我知道,你可以用一個同名的本地「隱藏它」 - 不要分割頭髮呃;-) ,但main()
中的局部變量只能在main()
內看到。
您需要了解範圍和原始數據類型的概念。結構不是原始類型,而是用戶定義的結構,所以如果你在一個給定的範圍內定義一個結構,它就不會被該範圍之外的程序知道,因爲它是你定義它的,因此它被限制在你所做的範圍內定義它。 Primitive data types像在語言中定義(int
,float
,char
)並且已知整個程序。如果他們不是隨處可得,它實際上是不可能的定義main()
本身,因爲
int main(void)
{
return 0;
}
這種簡單的main()
定義需要int
是「定義」了。
最後,爲了能夠定義,因爲你定義一個結構爲包含一個或多個這些原語的一個對象,你也需要這些基本類型結構。您當然可以使用之前定義的結構作爲結構的成員等等。
當你說「的結構」,你說的是一型('結構啄{...東西...}定義;'),或者是你在談論與該類型變量(用'結構定義thingy myThingy;'?) – immibis
我指的是接收結構實例的函數 - 即具有該類型的變量。 – Leponzo
所以「爲什麼你不能將'main'中定義的變量傳遞給其他函數,如果它們具有結構類型?」?答案就是你可以! – immibis