2012-05-04 10 views
0

6x15配列(マップ)のランダム座標を数字3に設定しようとしていますが、座標値がまだ0の場合のみです。配列は、最初のコンパイル時に、私は私はありませんエラーランダムな座標の「開いた」スロットに番号を配置

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

を取得し、しかし)

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 } 

を0に設定し、船のnumが、私が置きたい3の値の数ですされていますこれらのどちらが言っているのか...確かに、私がやろうとしていることをする良い方法がありますか?

答えて

1

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

は次のとおりです。

  • x intへのポインタ(int *x;
  • map[rand][rand]のアドレスを取得し、そのアドレス(*x)に格納された値をチェックX
  • に保管します
  • 0の場合はその値を更新してください。

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

関連する問題