0

6x15 配列 (マップ) のランダム座標を数値 3 に設定しようとしていますが、その座標の値がまだ 0 の場合のみです (配列内のすべての値は最初は 0 に設定されており、ship num は配置したい 3 の値)

 25 int shipnum;
 26 int x;
 27 
 28 shipnum = 1;
 29 while(shipnum > 0)
 30 {
 31 if ((&x = map[rand_number(MAX_ROWS)][rand_number(MAX_COLS)]) == 0)
 32 {*x = 3;
 33 shipnum --;}
 34 }

ただし、コンパイル中にエラーが発生します

testarray3.c:31:9: error: lvalue required as left operand of assignment
testarray3.c:32:2: error: invalid type argument of unary ‘*’ (have ‘int’)

これらのどちらが何を言っているのかわかりません...または、私がやろうとしていることを行うためのより良い方法はありますか?

4

1 に答える 1

1

xが int 変数である場合、&xそれはアドレスであり、それを変更することはできません (最初のエラー)。またx、int の場合は*x意味がありません。int はポインターではありません (2 番目のエラー)。

必要なものは次のとおりです。

  • int ( )xへのポインタを作成しますint *x;
  • のアドレスを取得しmap[rand][rand]て x に格納する
  • そのアドレスに格納されている値を確認します ( *x)
  • 0 の場合はその値を更新します。

あなたのコードは、それをすべて 2 行に詰め込もうとしないことで本当に恩恵を受けるでしょう。私は実際に int ポインター操作全体を避けたいと思います。コードを難読化するだけです。ランダム座標を 2 つの変数に格納し、通常の配列アクセス/割り当てを使用します。

于 2012-05-04T12:18:13.850 に答える