在C中定义一组结构?

main.h

#define DATA struct data DATA { int id; char data; } 

main.c中

 DATA *listOfData[100]; 

所以在这一点上,我将/应该能够访问列表中的DATA,如下所示:

 printf(listOfData[5]->data); 

它不是让我这样做的,运行只是在最后一次打印时冻结……没有任何错误或任何错误。

这是因为您已经定义了一个指针数组。 但你从来没有初始化任何指针。

因此:

 printf(listOfData[5]->data); 

将崩溃(未定义的行为),因为您在索引5处取消引用(无效)指针。

*(这是定义结构的一种非常奇怪的方式……)

要解决此问题,您需要为数组中的每个指针分配。 如果你实际上并不需要它是一个指针数组,那么最好只使它成为struct本身的数组:

 DATA listOfData[100]; 

并将其作为:

 listOfData[5].data 

然后,您不必处理分配每个元素。

我不确定为什么printf会冻结,但这有几个问题。 首先, DATA*数组中的所有指针都是未初始化的。 您可能打算创建一个DATA数组,而不是DATA指针数组:

 DATA listOfData[100]; 

你也没有用分号结束结构,所以它甚至不太可能编译:

 #define DATA struct data DATA { int id; char data; }; 

最后,你以一种相当不安全的方式使用printf ; 第一个参数需要是格式字符串,否则如果第一个参数中包含% ,则可能会出现奇怪的行为:

 printf("%c\n", listOfData[5].data); 

您尚未显示DATA *的任何内存分配。 将数组声明为结构数据数组,如:

 DATA listOfData[100]; 

或者动态分配内存并在数组中分配指针。