我想知道爲什麼我們可以通過值將結構傳遞給C函數,但我們決不能對數組(通過地址傳遞)進行相同的操作。將數組和結構傳遞給C函數
當我學習C時,他們告訴我數組會消耗很多堆棧,所以不希望按值傳遞它們。
但似乎結構通常是(如果不總是)比數組更大而且更復雜的數據結構,所以這種解釋現在是沒有意義的我!
任何人都可以幫助儘可能多的細節?
我想知道爲什麼我們可以通過值將結構傳遞給C函數,但我們決不能對數組(通過地址傳遞)進行相同的操作。將數組和結構傳遞給C函數
當我學習C時,他們告訴我數組會消耗很多堆棧,所以不希望按值傳遞它們。
但似乎結構通常是(如果不總是)比數組更大而且更復雜的數據結構,所以這種解釋現在是沒有意義的我!
任何人都可以幫助儘可能多的細節?
在C中,一個數組始終定義爲一個指針數組的第一個位置,因此根據定義,當要傳遞一個數組的函數您正在傳遞它的存儲器地址,因此其參考。
當你定義類型結構的變量,你分配到包含這個結構需要內存中的所有空間,如果你做出這樣的:
struct a, b;
...
a = b;
您是從複製所有值b轉換爲a,同樣,當你將它傳遞給一個函數時,你正在將原始結構的值拷貝到棧中。這就是所謂的按值傳遞參數。
這是真的,你說的是你的問題。一個結構可能比陣列更復雜,但它是完全有可能將其傳遞作爲值,並且它可以是低效率的,但不能傳遞通過值的陣列的原因是因爲它被定義爲默認的指針。
1與陣列不傳遞到功能時「由指針定義的」,它們而衰減到指針的註釋。 – 2012-09-15 21:27:12
感謝Hernan對於明確的答案:) –
這個問題已經問在C++的上下文,但也適用於c [鏈接](http://stackoverflow.com/questions/7454990/why-cant-we-pass-arrays-to-function-by - 值) – Yarneo