[英]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];
temp
在id
的索引處獲取項目的副本 。 您可以根據需要修改副本,但除非您將其分配回來(例如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.