2016-10-03 31 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またはこのような何かを初期化することができます。

私はかなり遅れてpointersstructおよびmallocとなりました。私は明確にするためRuby ...

から来る:

私は私のbookインスタンス内の64以上のsheetをしませ欲しいです。おそらく3つしか使用されないかもしれませんが、64を使うこともできます。しかし、それらを追加して、0から63の数字でチェックしたいと考えています。

+1

私もかなり迷っています...各書籍に正確に64枚の用紙が入っているようにしたいのですが、そのうちのいくつかは空(無効)になることがありますか?この場合、64シートポインタの配列を保持することができます。いずれかが空(無効)の場合は、NULLに設定します。 –

+0

その後、ポインタのリストを表示します。初期化の方が良い。 –

答えて

0

「速い」という意味にある程度依存します。 これらの要素とコードがどのように作用するかによって、コードが変更されます。一般に;ただし、CPU時間の重要な影響をほとんど感じることはほとんどありません。

オプション2では、ブックはポインターの配列を割り当てるため、ポインターをポイントするためのシートを割り当てるコード(およびオーバーヘッド)を追加する必要があることに注意してください。

書籍の中で共有する一部のスプレッドシートを意図していない限り、最初のオプションはよりクリーンに見えます。

また、本をコピーしている場合は、シート構造全体ではなくポインタをコピーするだけなので、オプション2が高速になります。

+0

シートを追加していただきありがとうございます。それ以降は何も削除せず、パラメータ/ステータスを変更するだけです。とにかく、私のケースでは両方のオプションがOKですが、2つ目のオプションはプログラミングにとっては良いでしょう。なぜなら、もし私がコピーすれば、ポインタのリストだけです。ポインタが空であればポインタをチェックするだけで、シート[i] .status' –

+0

あなたは歓迎して、コーディングを楽しんでください。一つ目は、ポインタの参照に注意を払って、ヌルポインタ参照やメモリリークの機会をたくさん提示することです。ヌルチェックをたくさん行い、本を削除したり、範囲外になったりすると、そのシートのメモリを解放するようにしてください。 – markshancock

関連する問題