C 为结构数组动态分配内存

C 为结构数组动态分配内存,c,arrays,pointers,struct,malloc,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

以下是我想做的:

#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);
}
#包括
#包括
结构myStruct{
int-myVar;
}
struct myStruct myBigList=null;
void defineMyList(struct myStruct*myArray)
{
myStruct*myArray=malloc(10*sizeof(myStruct));
*myArray[0]=“42”;
}
int main()
{
定义列表(&myBigList);
}
我正在编写一个简单的C程序来实现这一点。我正在使用GNU99 Xcode 5.0.1编译器。我读过很多例子,编译器似乎不同意在哪里使用
struct
标记。在
sizeof()
命令中使用
struct
引用似乎根本无法识别
struct

这是因为结构名不会自动转换为类型名。在C(不是C++)中,必须显式键入定义类型名

任用

struct myStruct instance;
当使用类型名或typedef时,如下所示

typedef struct {
    int myVar;
} myStruct;
现在,myStruct可以简单地用作类似于int或任何其他类型的类型名

<>请注意,这只需要在C++中自动键入每个结构/类名。


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

代码中有一些错误。让它:

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
的类型错误

    sizeof(struct myStruct)


为了处理该阵列的所有10个元素,请执行以下操作:

myArray[0].myVar = '42';
应该是:

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

你不应该这样说吗

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

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

myvar是一个整数。

n=sizeof(struct myStruct);结构myStruct*mBigList=NULL+1要求避免在sizeof中使用“struct”而改为使用实例名。这非常有效!非常感谢。**是关键。给每个人的虚拟饮料!再次感谢。大家都澄清了很多困惑。应该在main()中释放myBigList()
'42'
不是一个正常的字符常量!这似乎是对公认答案的评论,而不是对问题本身的回答。这似乎是对公认答案的评论,而不是对问题本身的回答。
(*myArray)[0].myVar = 42;