*rooms[10]在这个代码中是什么意思?它通常不是structRoom吗?在这种情况下它意味着什么?
struct Room
{
float width;
float length;
float height;
char *name;
};
struct House
{
char* address;
struct Room *rooms[10];
};
在中
struct House
{
char* address;
struct Room rooms[10];
};
您有10个完整的Room
实例。也就是说,House
结构的大小是Room
结构的10倍,再加上一些额外的(对于address
)。此外,所有10个都在内存中的附近位置,导致更高的碎片化。
另一方面,在中
struct House
{
char* address;
struct Room *rooms[10];
};
您只需要存储指向10个房间的指针(这些房间需要在堆上分配)。在第一种情况下,当您调用以House
为参数的函数时,您的堆栈会被炸毁,因为它需要一个巨大的结构存储在那里,而在第二种情况下会复制一个小得多的结构,从而导致更快的函数调用。