2011-10-18 79 views
1

我正在下面作業的問題從C for Scientists and Engineers無效的類型參數「*」(有「詮釋」)

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]; 

我試圖編譯這段代碼用gcc,但是當我這樣做,它給了我下面的錯誤:

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]是沒有意義的。你確定你完全抄襲了作業問題嗎? (如果是這樣,壞的功課問題,他們發生。)

2
p2 = *a1[2]; 

在C,一元*只爲指針定義。 p2int*a1int[]a1[2]int[]具有比一元*更高的優先級,因此您有*(a1[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. 
相關問題