我有以下结构排列,并且我很难获取数据的第一个 myNestedStruct
部分中包含的数据。
struct myNestedStruct
{
char programName[28];
union
{
float parameters[1];
struct
{
long size;
char info[1];
} datas;
} contents;
} myNestedStruct;
struct myStruct
{
int ID;
int numIDs;
union
{
myNestedStruct programs[1];
struct
{
int size;
char info[1];
} datas;
} contents;
};
我应该像这样访问它:
myStruct.contents.programs[0].contents.datas
最佳答案
您的定义不一致。
要么使用命名结构,并且仅命名结构:
struct MyNestedStruct /* note: no typedef, but a name */
{
char programName[28];
union
{
float parameters[1];
struct
{
long size;
char info[1];
} datas;
} contents;
};
struct MyStruct /* note: no typedef, but a name */
{
int ID;
int numIDs;
union
{
struct MyNestedStruct programs[1]; /* note the struct */
struct
{
int size;
char info[1];
} datas;
} contents;
};
然后定义一个变量,如下所示:
struct MyStruct myStruct;
myStruct.contents.programs[0].contents.datas ...;
或使用typedef'ed匿名结构,并且仅typedef'ed匿名结构:
typedef struct /* note: typedef, but NO name */
{
char programName[28];
union
{
float parameters[1];
struct
{
long size;
char info[1];
} datas;
} contents;
} MyNestedStruct;
typedef struct /* note: typedef, but NO name */
{
int ID;
int numIDs;
union
{
MyNestedStruct programs[1]; /* NO struct, as typedef'ed above */
struct
{
int size;
char info[1];
} datas;
} contents;
} MyStruct;
然后定义一个变量,如下所示:
MyStruct myStruct;
myStruct.contents.programs[0].contents.datas ...;
您可以混合使用这两种方法,但这样做只会导致困惑。
关于c - 如何访问另一个结构体内部的结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39955715/