我静态定义了一个 myStruct
并且在结构内部,我有一个大小为 3 的 innerStruct
数组。我想返回一个指向该数组的指针,以便我可以分配一个指向其中一个元素的本地指针,以便稍后修改值。
一方面,我的编译器似乎告诉我我正在返回一个 int 而不是 innerStruct *
类型。
如何正确操作? 是否需要双指针?
#include <stdio.h>
typedef struct
{
int content;
} innerStruct;
typedef struct
{
int a;
innerStruct inner[3];
} myStruct;
static myStruct m1;
innerStruct * getMyStructPtr()
{
return &(m1.inner);
}
int main()
{
int id = 0;
int elem = 1;
/* Define a local ptr so I can modify values of the m1 struct */
innerStruct * local_ptr = NULL;
innerStruct * myStruct_ptr = getMyStructPtr(); // seems like my compiler tells me I'm returning an int instead of innerStruct * type
/* Point to one of the elements */
local_ptr = &myStruct_ptr[elem];
local_ptr->content = 123;
return 0;
}
在线代码编译器链接:https://onlinegdb.com/BJNO9lxA-
最佳答案
这样想:在您使用数组的上下文中,它实际上相当于一个指针。例如,m1.inner
实际上可以用作指向 m1.inner[3] 中第一个元素的指针 innerStruct *
。
为了获得指向您的m1.inner
数组中任何一个元素的指针,您可以在从innerStruct * getMyStructPtr()
返回时执行以下操作。
- 获取第一个元素的指针:
return m1.inner
- 获取指向第二个元素的指针:
return m1.inner + 1
- 获取指向第三个元素的指针:
return m1.inner + 2
当然你应该选择不硬编码+ 1
,+ 2
,而是将其作为参数传递,即
innerStruct * getMyStructPtr(int elementNo)//don't forget it is zero based
{
return m1.inner + elementNo;
}
话虽如此,数组和指针之间当然存在一些差异。如果您仍然对为什么数组和指针在大多数情况下可以互换感到困惑,请提供 this answer一读。作者做了非常详尽的解释。
关于c - 返回指向静态定义的结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46965629/