私は構造体を持っています:
struct line{
bool isValid;
int tag;
int block;
};
typedef struct line* L;
struct line*
名前を設定しての配列を設定したい。
つまりL set[];
、を初期化してから、セットの配列を宣言したいということですL* cache[]
。
それで、cache_new(int numSets, int numLines)
を使用してそれらを初期化したい関数でmalloc()
、どうすればそれを行うことができますか?Cを初めて使用する場合は、どんな助けでも大歓迎です。
配列がで宣言されている場合、[]
動的に割り当てることはできません。[]
配列は、自動または静的に割り当てられます意味。
ゼロ化されたいくつかの構造体を動的に割り当てるには、次のようにする必要があります。
struct line *set = calloc(num_lines, sizeof *set);
動的割り当てでは、配列自体に名前はありませんが、set
最初の要素を指すポインターを使用すると、すべての配列メンバーにアクセスできます。
私はあなたが何について尋ねているのか正確にはわかりませんcache
が、おそらくそれは次のようになっているはずです:
struct line **cache = calloc(num_sets, sizeof *cache);
for (size_t i = 0; i < num_sets; ++i)
cache[i] = calloc(num_lines, sizeof *cache[i]);
ポインタtypedefは使用しないでください。コードが読みにくくなります。typedef struct line Line;
必要に応じてできます。そして、本当にあなたがやるかどうかは関係ありませんcalloc(N, size)
かmalloc(N * size)
。
次に[]
、表記を使用してこれらの配列にアクセスできます。cache[3][5].tag = 7;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加