c - 如何访问另一个结构体内部的结构体

标签 c struct

我有以下结构排列,并且我很难获取数据的第一个 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/

相关文章:

C - 将用户输入拆分为标记并在输出中识别/格式化它们

c++ - C++ 中的函数引用和 assert(0)

c# - JavaScriptSerializer 和 ValueTypes(结构)

c# - 结构可以从 C# 中的类派生吗?

将 arr 的字符一个一个连接到空字符串

c - 补码截断?

c - 使用 malloc 将内存分配给结构指针和将结构指针指向结构的内存地址有什么区别?

c - 结构中的二维数组

c++ - 重新分配大小未知的 const char 数组

c - 如何在虚拟机环境下调试 "openvswitch"之类的内核模块程序?