为Array of Structs动态分配内存

这是我正在尝试做的事情:

#include  #include  struct myStruct { int myVar; } struct myStruct myBigList = null; void defineMyList(struct myStruct *myArray) { myStruct *myArray = malloc(10 * sizeof(myStruct)); *myArray[0] = '42'; } int main() { defineMyList(&myBigList); } 

我正在写一个简单的C程序来完成这个。 我正在使用GNU99 Xcode 5.0.1编译器。 我已经阅读了很多例子,编译器似乎不同意在哪里使用struct标签。 在sizeof()命令中使用struct引用似乎根本不识别struct

您的代码中存在一些错误。 做了:

 struct myStruct *myBigList = NULL; /* Pointer, and upper-case NULL in C. */ /* Must accept pointer to pointer to change caller's variable. */ void defineMyList(struct myStruct **myArray) { /* Avoid repeating the type name in sizeof. */ *myArray = malloc(10 * sizeof **myArray); /* Access was wrong, must use member name inside structure. */ (*myArray)[0].myVar = 42; } int main() { defineMyList(&myBigList); return 0; /* added missing return */ } 

基本上你必须使用struct关键字,除非你输入它,并且全局变量myBigList的类型错误。

这是因为struct name不会自动转换为类型名称 。 在C(而不是C ++)中,您必须显式地键入一个类型名称。

要么使用

 struct myStruct instance; 

当使用类型名称时,或者像这样输入typedef

 typedef struct { int myVar; } myStruct; 

现在myStruct可以简单地用作类似于int或任何其他类型的类型名称。

请注意,这仅在C. C ++中需要自动键入每个结构/类名称。

将此扩展到包含指向同一类型的指针的结构时,这是一个很好的约定

  sizeof(struct myStruct) 

要么

  typedef struct myStruct myStrut; sizeof(myStruct) 

为了对该数组的所有10个元素起作用:

 myArray[0].myVar = '42'; 

应该:

 (*myArray)[0].myVar = '42'; 

不应该有以下声明

 myArray[0].myVar = '42'; 

是吗?

 (*myArray)[0].myVar = 42; 

myvar是一个整数。