2017-10-18 63 views
-1

这里真的是业余爱好者的问题,试图更好地掌握C语言。我有这样的结构在这里宣布:是否需要在将元素分配给它之前分配指针数组?

struct room { 
    char* name; 
    char* type; 
    int max_cons; 
    int curr_cons; 
    struct room* connections[MAX_CONNECTIONS]; 
}; 

我的问题是,是否需要将我分配空间的连接阵列之前,我尝试其他的结构分配给它?如果是这样,我是否会使用循环并为每个位置分配空间,或者是否有更有效的方法来实现这一点。谢谢

+2

'connections'是一个指针数组。该数组已分配。但是每个指针的指向数据应该分配到别处。 –

回答

1

您的代码:

struct room { 
    char* name; 
    char* type; 
    int max_cons; 
    int curr_cons; 
    struct room* connections[MAX_CONNECTIONS]; 
}; 

什么也不做,但声明的类型。在这种情况下,包含一些指针,一些整数和指针数组的结构。如果现在定义类型的变量:

struct room MyRoom; 

可变MyRoom将被自动分配的内存2个指针,2个整数,和整个阵列。您不必分别分配数组 - 它是结构的一部分。如果你想在那里放置字符串,你可能可能必须为nametype分配内存,除非你只是想给它们分配其他地方分配的字符串地址。

现在,如果您希望该数组的某个元素指向某个结构,那么只需将该结构的地址放在该结构中即可。 结构在内存中存在是一个新问题。

1

不,你不需要分配空间connections。它是一个指针数组,而不是指向数组的指针。该阵列包含在room结构的内存中。

您可能需要为分配给阵列元素的房间分配内存。但是你也可以指定struct room变量的地址。

1
struct room* connections[MAX_CONNECTIONS]; 

创建一个指向房间的指针数组。给定的MAX_CONNECTIONS大小。 如果是安全的

connections[0] = malloc(sizeof(struct room)); 

相关问题