gpt4 book ai didi

c - 使用 get() 返回静态结构数组指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:29 24 4
gpt4 key购买 nike

我的项目中有一个文件,它有一个定义为 MyStruct_t myStruct[SIZE] 的本地结构数组,我可以在该模块中很好地使用它。现在我想让不同的代码模块可以访问它,所以我想出了一个函数:

MyStruct_t *GetStruct(void) {
return myStruct;
}

但是当我从我的不同模块调用它时,我得到一个错误 expression must be a modifiable lvalue。我的来电者看起来像:

void myFunc(void) {
MyStruct_t locStruct;
locStruct = GetStruct();
}

我怎样才能做到最好?

最佳答案

GetStruct 返回指向 myStruct[SIZE] 元素的指针,而不是 MyStruct_t。除非你真的需要一个副本,否则让 locStruct 成为一个指针,就像这样:

MyStruct_t *locStruct = GetStruct();

请注意,locStructMyStruct_t数组,大小为 SIZE

如果你确实想制作一个副本,取消引用 GetStruct() 的结果:

MyStruct_t locStruct = *GetStruct();

这将生成 myStruct 数组初始元素的副本。

由于 GetStruct 除了访问 myStruct 之外不提供额外的服务,你不妨将 myStruct 设为全局(extern) 而不是 static

最后,您可以更改 GetStruct 以访问特定元素。这也将负责检测溢出 - 即尝试让元素超过 SIZE 或处于负索引:

bool GetStruct(int index, MyStruct_t *ptr) {
if (index < 0 || index >= SIZE) {
return false;
}
*ptr = myStruct[index];
return true;
}

现在 GetStruct() 的调用看起来像这样:

MyStruct_t locStruct;
if (GetStruct(5, &locStruct)) {
// All good
} else {
// Error
}

关于c - 使用 get() 返回静态结构数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578299/

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