是否需要在将元素分配给它之前分配指针数组?
问题描述:
这里真的是业余爱好者的问题,试图更好地掌握C语言。我有这样的结构在这里宣布:是否需要在将元素分配给它之前分配指针数组?
struct room {
char* name;
char* type;
int max_cons;
int curr_cons;
struct room* connections[MAX_CONNECTIONS];
};
我的问题是,是否需要将我分配空间的连接阵列之前,我尝试其他的结构分配给它?如果是这样,我是否会使用循环并为每个位置分配空间,或者是否有更有效的方法来实现这一点。谢谢
答
您的代码:
struct room {
char* name;
char* type;
int max_cons;
int curr_cons;
struct room* connections[MAX_CONNECTIONS];
};
什么也不做,但声明的类型。在这种情况下,包含一些指针,一些整数和指针数组的结构。如果现在定义类型的变量:
struct room MyRoom;
可变MyRoom
将被自动分配的内存2个指针,2个整数,和整个阵列。您不必分别分配数组 - 它是结构的一部分。如果你想在那里放置字符串,你可能可能必须为name
和type
分配内存,除非你只是想给它们分配其他地方分配的字符串地址。
现在,如果您希望该数组的某个元素指向某个结构,那么只需将该结构的地址放在该结构中即可。 那结构在内存中存在是一个新问题。
答
不,你不需要分配空间connections
。它是一个指针数组,而不是指向数组的指针。该阵列包含在room
结构的内存中。
您可能需要为分配给阵列元素的房间分配内存。但是你也可以指定struct room
变量的地址。
答
struct room* connections[MAX_CONNECTIONS];
创建一个指向房间的指针数组。给定的MAX_CONNECTIONS大小。 如果是安全的
connections[0] = malloc(sizeof(struct room));
等
'connections'是一个指针数组。该数组已分配。但是每个指针的指向数据应该分配到别处。 –