如果我有以下幾點: -傳遞一個結構的函數用C
struct foo
{
int a;
int *b;
} bar;
void baz(struct foo qux)
{
}
難道我就在想,通過bar
到baz()
導致的bar
本地副本被壓入堆棧?如果是這樣,這是什麼樣的副本?在C++中,我認爲它會調用複製構造函數或默認的拷貝構造函數,但我真的不知道這將如何在C中工作。
C是否有任何默認複製構造函數的概念,並且它是否具有名稱?能做些什麼來執行深層複製? (假設)。我能想到的唯一方法是實際進行深層複製,然後將其傳遞給函數。
通常,我會傳遞一個指向foo
的指針,但我只是好奇它是如何工作的。此外,我認爲傳遞指針速度更快,可以節省內存,並且是進行此類操作時建議採取的行動方式。我猜這是一個淺拷貝;這可以改變嗎?
p.s. C中沒有構造函數本身;只在C++中。在C中,您的數據結構將被簡單地逐個字節複製。 –
@EdwardFalk:當然,事實上我談到*初始化*,而不是構造;另外,標準沒有規定「字節逐字節」的事實,它實際上說只有命名的字段才能被複制(即使在初始化之後,「結構對象的未命名成員具有不確定的值」,C99§6.7 .8¶9) - 即填充可能會或可能不會被複制。 –
很好的解釋,我猜你不能覆蓋默認行爲來執行深層複製,如果這是必需的? – chrisw