2012-11-14 45 views
3

我知道在C中可以按值傳遞(或返回)結構,但不能按值傳遞數組。當結構包含數組時會發生什麼?數組(在結構內)是否會在結構按值傳遞(或返回)時被複制?我已經運行a sample at ideone.com,它的工作原理,但我想知道在這個標準的涵蓋範圍(是的,我看過)。按值傳遞和返回結構(與數組成員)

http://open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

typedef struct 
{ 
    float aValue; 
    int anArray[5]; 
} myStruct; 

myStruct addValueToArray(myStruct in) 
{ 
    myStruct out = in; 

    int i; 
    for (i = 0; i < 5; i++) 
    { 
     out.anArray[i] = in.anArray[i] + in.aValue; 
    } 

    return out; 
} 
+3

在'struct'中包裝數組是通過值傳遞數組的常用方法。 –

回答

5

是的,它會被複制。整個結構是一個值,所以它可以傳遞給函數,返回,並且(很多人似乎忘記了這一點,但你使用它,很好!)分配。

注意,可能存在需要任何填充被複制,這使得它可能=更快memcpy()人工電話可能是,因爲它不可能做到這一點。

很難在PDF中找到一個支持這一點的地方,但我在查找方面不是很有經驗。基本上,從C的意義上講,struct實例是「值」,所以大部分的談話只是自動涵蓋了struct

喜歡:

(6.2.5,第1部分) 存儲在對象或由函數返回一個值的含義是由 類型用於訪問它的表達的測定。

(6.2.5,部分20) 的結構式描述了一種順序地分配非空集合構件的對象 (和,在某些情況下,一個不完整的陣列),其每一個具有一個任選 指定的名稱和可能是不同類型。

(6.8.6.4,第3部分) 如果執行與表達式返回語句,則表達式的值是 返回給調用者作爲函數調用表達式的值。