[英]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.