簡體   English   中英

為什么我不能以這種方式在C中寫入結構數組?

[英]Why can't I write to my array of structs in C in this way?

我有一個以這種方式聲明的結構數組:

typedef struct {
    int a;
    int b;
} buffer_t;

buffer = (buffer_t *) calloc(SIZE, sizeof(buffer_t));

稍后在代碼中,我這樣寫:

buffer_t temp = buffer[id];
temp.a = new_a;
temp.b = new_b;

但是,當我以這種方式寫信時,似乎什么也沒有。 如果我這樣做:

buffer[id].a = new_a;
buffer[id].b = new_b;

它工作得很好。

我在這做錯了什么? 我在這里錯過了一些重要的部分嗎?

(我在內部循環中有此代碼,因此我想使其盡可能高效...)

如果重要的話,我正在使用Visual C ++ 2008。

這是因為struct值被復制:

buffer_t temp = buffer[id];

tempid的索引處獲取項目的副本 您可以根據需要修改副本,但除非您將其分配回來(例如buffer[id] = temp ),否則更改不會“粘住”。

使用指針修復此問題:

buffer_t *temp = &buffer[id];
temp->a = new_a;
temp->b = new_b;

現在, temp 指向 buffer[id]處的struct ,因此所有修改都發生在該struct本身上,而不是在其副本上。

the struct, not creating a reference to it. 創建temp變量時,是在結構,而不是對其進行引用。 如果要使變量相互修改,可以使用參考:

buffer_t &temp = buffer[id];
temp.a = new_a
temp.b = new_b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM