我有一个以这种方式声明的结构数组:
typedef struct {
int a;
int b;
} buffer_t;
buffer = (buffer_t *) calloc(SIZE, sizeof(buffer_t));
Run Code Online (Sandbox Code Playgroud)
稍后在代码中我写这样:
buffer_t temp = buffer[id];
temp.a = new_a;
temp.b = new_b;
Run Code Online (Sandbox Code Playgroud)
但是当我这样写的时候似乎没有什么可以坚持下去的.如果我这样做:
buffer[id].a = new_a;
buffer[id].b = new_b;
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
我在这做错了什么?我在这里错过了一些重要的部分吗?
(我的内循环中有这个代码所以我想尽可能高效...)
如果重要的话,我正在使用Visual C++ 2008.
这是因为struct
复制值:写入时
buffer_t temp = buffer[id];
Run Code Online (Sandbox Code Playgroud)
temp
获取索引处的项目副本id
.您可以根据需要修改副本,但除非您将其分配(例如buffer[id] = temp
),否则更改不会"粘住".
使用指针修复此问题:
buffer_t *temp = &buffer[id];
temp->a = new_a;
temp->b = new_b;
Run Code Online (Sandbox Code Playgroud)
现在temp
点到struct
的buffer[id]
,所以所有的修改发生在struct
本身,而不是它的副本.
归档时间: |
|
查看次数: |
116 次 |
最近记录: |