C变量赋值给数组元素

时间:2014-07-11 15:05:11

标签: c arrays variables reference

关于如何为变量赋值数组元素的快速问题。试图确保我的代码使用最少的内存。

如果我有一个预定义的结构数组并且想要创建对数组的一个元素的引用,我如何创建变量以便它通过引用而不是值传递?我已经四处寻找,但也许我的搜索字符串不是它需要的。

例如

#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?

2 个答案:

答案 0 :(得分:2)

这是一份副本。您需要使用指针来实际修改远程结构:

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

答案 1 :(得分:2)

  

当我在myfunc1中创建ms1时,它只是对mystructs [1]的引用吗?

不,这是副本。

  

还是将元素复制到ms1?

  

myfunc1和myfunc2会在内存使用中产生相同的结果吗?

没有。 (更详细说明:myfunc1创建一个mystruct类型的本地对象(“在堆栈上”);离开函数后,一切都恢复原状,所以没有坏处。结构不大,所以没问题。在PC上你可能会遇到大(MB)或昂贵(例如套接字连接)的问题。)

  

将ms1.zabba = 5实际更新mystructs [1] .zabba?

不,因为ms1是副本。

您可能想要使用指针或引用。