如何在C中获取struct字段

时间:2012-06-13 09:00:40

标签: c struct

我有代码:

main() 
{
   typedef struct
   {
      int data;
   } Information;

   typedef Information *PtrInformation;

   typedef struct InformationListStruct *PtrInformationListStruct;

   typedef struct InformationListStruct
   {
      PtrInformationListStruct ptrNext;
      PtrInformation ptrInf;
   } PtrInformationListStructElement;

   //==============================

   PtrInformationListStruct list;
   list = (PtrInformationListStruct)malloc(sizeof(InformationListStruct));
   PtrInformation ptr = (*list).ptrInf;  // error !!!

}

编译器抛出错误:

  • “ptrInf”不是InformationListStruct的成员,因为函数main()中尚未定义类型

如果我把这一行:

typedef struct InformationListStruct *PtrInformationListStruct;

之后:

   typedef struct InformationListStruct
   {
      PtrInformationListStruct ptrNext;
      PtrInformation ptrInf;
   } PtrInformationListStructElement;

然后出现其他错误:

  • 函数main()
  • 中预期的类型名称
  • 宣言缺失;在函数main()

如何正确获取“ptrInf”?

3 个答案:

答案 0 :(得分:5)

You shouldn't cast malloc()'s return in C.另外,请使用sizeof,不要重复输入类型名称:

list = malloc(sizeof *list);

答案 1 :(得分:3)

你需要

 list = (PtrInformationListStruct)malloc(sizeof(struct InformationListStruct));
 //                                               |
 //                                          note struct keyword

 list = (PtrInformationListStruct)malloc(sizeof(PtrInformationListStructElement));

因为你有一个typedef

答案 2 :(得分:1)

您正在使用哪个编译器,在visual studio中,您的代码正在成功编译。请避免在函数体内进行类型定义。