2016-10-03 58 views
0

什麼是最好的/最快的方式?結構或指針的結構?

結構結構的:

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

然後我會用指針列表去。更好的初始化。 –

回答

0

在一定程度上它取決於你的意思是「更快」。 你的代碼如何與這些元素交互會改變這一點。一般來說;但是,很少有時候您可能會看到CPU時間的顯着影響。

請注意,在選項2中,Book只分配一個指針數組,因此您將不得不添加代碼(和開銷)爲要指向的指針分配表單。

只要您不打算在書籍中共享某些表格,第一個選項看起來會更清晰。

另外,如果您正在複製書籍,選項2會更快,因爲您只會複製指針而不是整個Sheet結構。

+0

謝謝,當我添加一張紙後,我不會刪除任何東西,只需更改參數/狀態即可。無論如何,對於我的情況,兩種選擇都可以,但第二種選擇可能更適合編程,因爲1 - 如果我複製,只有指針列表,2 - 可以通過僅檢查指針而不是用於循環的「表[i] .status' –

+0

不客氣,喜歡編碼。有一點,要小心指針,它們爲空指針引用和內存泄漏提供了很多機會。做很多空檢查,並確保當你刪除一本書或超出範圍時,爲他們釋放內存。 – markshancock