为Array of Structs动态分配内存

时间:2013-11-13 08:21:33

标签: c arrays pointers struct malloc

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

#include <stdio.h>
#include <stdlib.h>

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标签。在struct命令中使用sizeof()引用似乎根本无法识别struct

5 个答案:

答案 0 :(得分:4)

您的代码中存在一些错误。成功:

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关键字,除非typedef关闭它,并且全局变量myBigList的类型错误。

答案 1 :(得分:2)

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

使用

struct myStruct instance;

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

typedef struct {
    int myVar;
} myStruct;

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

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

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

答案 2 :(得分:1)

    sizeof(struct myStruct)

    typedef struct myStruct myStrut;
    sizeof(myStruct)

答案 3 :(得分:0)

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

myArray[0].myVar = '42';

应该是:

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

答案 4 :(得分:0)

不应该是以下陈述

myArray[0].myVar = '42'; 
是吗?

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

myvar是一个整数。