繁体   English   中英

为Array of Structs动态分配内存

[英]Dynamically allocate memory for Array of Structs

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

#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标签。 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 ,除非你的关键字typedef它拿走,并设置全局变量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是一个整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM