关于如何为变量分配数组元素值的快速问题。试图确保我的代码使用最少的内存。
如果我有一个预定义的结构数组,并且想要创建对数组中一个元素的引用,那么如何创建变量,以便通过引用而不是值传递它?我到处找过这个,但也许我的搜索字符串不是它所需要的。
例如

#myfile.h
typedef struct {
  uint8_t abba;
  uint8_t zabba;
} mystruct;

extern mystruct mystructs[2];

#myfile.c
mystruct mystructs[2] = {
  {.abba=0,.zabba=1},
  {.abba=2,.zabba=3}
};

void myfunc1() {
  mystruct ms1 = mystructs[1];
  printf("%d", ms1.abba);
  ms1.zabba = 5;
}

void myfunc2() {
  printf("%d", mystructs[1].abba);
  mystructs[1].zabba = 5;
}

所以我的问题如下:
当我在myfunc1中创建ms1时,它只是对mystructs[1]的引用吗?还是将元素复制到ms1中?
myfunc1和myfunc2在内存使用方面是否会产生相同的结果?
ms1.zabba=5真的会更新mystructs[1].zabba吗?

最佳答案

当我在myfunc1中创建ms1时,它只是对mystructs[1]的引用吗?
不,这是一本。
还是将元素复制到ms1中?
对。
myfunc1和myfunc2在内存使用方面是否会产生相同的结果?
不(更详细地说:myfunc1创建了一个mystruct(“在堆栈上”)类型的本地对象;在离开函数之后,一切都像以前一样恢复了,所以没有造成任何伤害。结构不大,所以没问题。在个人电脑上,你可能会遇到大容量(MBs)或昂贵的东西的问题(例如插座连接)
ms1.zabba=5真的会更新mystructs[1].zabba吗?
不,因为ms1是副本。
您可能需要使用指针或引用。

关于c - C变量分配给数组元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24700862/

10-11 16:08