2

これは基本的な質問だと思いますが、私は英語が苦手で、プログラミング言語の用語にまだ慣れていないため、ここで質問します (見つけられませんでした)。

これが私のコンテキストです:

次のような構造があります(単純化しましょう)

struct _unit
{
  char value;
} Unit;

メインプログラムでは、構造Unitを指す他のポインターの行を指すポインターの行が必要です。何かのようなもの

int main ()
{
  Unit** units;

  ..

  printf("%d", units[0][0].value);

  ...
}

Unitに多次元配列としてアクセスできるようにするにはどうすればよいか、少し混乱します。

これが私の試みです

{
  units = (Unit**)malloc(sizeof(void*));

  units[0][0] = (Unit*)malloc(sizeof(Unit));
}
4

2 に答える 2

4

あなたはほとんどそこにいます。

まず、型を as として宣言する必要がありますUnit**Unit*次に、行数を保持するのに十分なポインタを割り当てます。最後に、これらの作成されたポインターをループして、それぞれを作成しますUnit

例えば:

int i;
Unit** u;

// Allocate memory to store 50 pointers to your columns.    
u = malloc(sizeof(Unit*) * 50);

// Now, for each column, allocate 50 Units, one for each row.
for(i=0; i<50; i++) {
    u[i] = malloc(sizeof(Unit) * 50);
}

// You can now access using u[x][y];

それが伝統的なやり方です。C99 では、次のように、これを行う別の構文も導入されました。

Unit (*u)[n] = malloc(sizeof(Unit[n][n])) // n = size of your matrix

から: https://stackoverflow.com/a/12805980/235700

于 2012-10-14T15:19:32.763 に答える
2

構造体宣言の意味を誤解しているかもしれません。

struct _unit
{
    char value;
} Unit;

コードの効果は、構造体型を宣言し、struct _unitその型の 1 つの変数 (名前付き) にスペースを割り当てることですUnit

おそらくあなたが言いたかったことは

struct _unit
{
    char value;
};

typedef struct _unit Unit;

C では、「構造体」という単語は、typedef を作成しない限り、型の一部です。

于 2012-10-14T15:53:12.630 に答える