2011-10-18 10 views
1

私はC for Scientists and Engineersから次の宿題の問題に取り組んでいる:私はgccで、このコードをコンパイルしようとしているが、ときに私だ無効な型引数「*」(「int型」を持っている)

Given the following declarations and assignments, what do these expressions evaluate to? 

int a1[10] = {9,8,7,6,5,4,3,2,1} 
int *p1, *p2; 
p1 = a1+3; 
Line 14: p2 = *a1[2]; 

そう、それは私に次のエラーを与える:

w03_3_prob15.c: In function 'main': 
w03_3_prob15.c:14:7: error: invalid type argument of unary '*' (have 'int') 

私はコンパイルするには、次のコマンドを使用しています:

gcc -o w03_3_prob15 w03_3_prob15.c -std=c99 

私は本当によ何をすべきかわからない。このエラーを修正する方法について考えていますか?

+1

あなたは宿題をするためにそれをコンパイルするつもりはありません。あなたはそれを見て答えを知ることができるはずです。しかし、あなたが投稿するコードは壊れています。本に戻って正しく入力したことを確認してください。 –

+0

私はちょうど本から正確にコードをタイプしたことを確認しました。エラーがどこにあるかを示すために、「行14:」が追加されています。 –

答えて

7

本は正しくないため、行がコンパイルされません。 author's Errata page

Page 438, line 17 from the bottom. 
p2 = *a1[2]; 
should be p2 = &a1[2]; 
+0

それを修正しました!そのページを私に指摘してくれてありがとう。それは将来的に便利になるだろう。 –

1

p2のタイプはint*です。 a1[2]のタイプはintであるため、*a1[2]は無意味です。宿題問題を正確にコピーしましたか? (悪い宿題の問題が、もしそうならば。彼らが起こる。)Cで

2
p2 = *a1[2]; 

、単項*は、ポインタのみのために定義されています。 p2int*です。 a1int[]です。 a1[2]intです。 []が単項型の*よりも優先順位が高いため、*(a1[2])があります。これは正式な表現ではありません。これがコンパイラが停止している理由です。

私はこれに対して2つの解決策が考えられます。あなたが望むものは、あなたがしようとしているものによって決まります。

*p2 = a1[2]; // Assigns the value of the second int in the array to the location 
      // pointed to by p2. 
p2 = &a1[2]; // Assigns the location of the second int in the array to p2. 
関連する問題