结构或指针的结构?

结构或指针的结构?

问题描述:

什么是最好的/最快的方式?结构或指针的结构?

结构结构的:

struct Sheet{ 
    u8 status; // to check if empty ? 
    u8 reserve0; 
    u8 reserve1; 
    u8 reserve2; 
    struct words words[1024]; 
}; 

struct Book { 
    int id; 
    struct Sheet sheet[64]; 
}; 

在这种情况下,如何检查sheet表是空的或不?我需要为每张表添加status

结构

struct Sheet{ 
    u8 reserve0; 
    u8 reserve1; 
    u8 reserve2; 
    struct words words[1024]; 
}; 

struct Book { 
    int id; 
    struct Sheet* sheet[64]; 
}; 

的指针表,我不需要使用malloc,因为它们是固定的表。

结构结构的,我可以通过设置status指针初始化结构,我可以bookinstance.sheet[] = NULL或类似这样的东西初始化。

我很迷茫与pointers,structmalloc。我来自Ruby ...

要明确:

我想不会超过64 sheetbook实例。也许只有3将被使用或64 ...但我希望能够添加它们,并检查它们从0到63的数字。

+1

我也很迷茫......你想让每本书精确地包含64页,其中一些可能是空的(无效)?在这种情况下 - 是的,你可以维护一个64页的指针数组,如果它们中的任何一个都是空的(无效的),那么将它设置为NULL。 –

+0

然后我会用指针列表去。更好的初始化。 –

在一定程度上它取决于你的意思是“更快”。 你的代码如何与这些元素交互会改变这一点。一般来说;但是,很少有时候您可能会看到CPU时间的显着影响。

请注意,在选项2中,Book只分配一个指针数组,因此您将不得不添加代码(和开销)为要指向的指针分配表单。

只要您不打算在书籍*享某些表格,第一个选项看起来会更清晰。

另外,如果您正在复制书籍,选项2会更快,因为您只会复制指针而不是整个Sheet结构。

+0

谢谢,当我添加一张纸后,我不会删除任何东西,只需更改参数/状态即可。无论如何,对于我的情况,两种选择都可以,但第二种选择可能更适合编程,因为1 - 如果我复制,只有指针列表,2 - 可以通过仅检查指针而不是用于循环的“表[i] .status' –

+0

不客气,喜欢编码。有一点,要小心指针,它们为空指针引用和内存泄漏提供了很多机会。做很多空检查,并确保当你删除一本书或超出范围时,为他们释放内存。 – markshancock