gpt4 book ai didi

C变量赋值给数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:38 25 4
gpt4 key购买 nike

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

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

例如

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

最佳答案

When I create ms1 in myfunc1, is it just a reference to mystructs[1]?

不,这是一个副本。

or does it copy the element into ms1?

是的。

Will myfunc1 and myfunc2 yield the same results in memory usage?

没有。 (更详细地说:myfunc1 创建一个 mystruct 类型的本地对象(“在堆栈上”);离开函数后一切都恢复原样,所以没有造成任何伤害。结构不大,所以没问题。在 PC 上你大 (MB) 或昂贵的东西(例如套接字连接)可能会出现问题。)

will ms1.zabba = 5 actually update mystructs[1].zabba?

不,因为 ms1 是一个副本。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com