一元'*'的无效类型参数(有'int')

时间:2011-10-18 19:52:40

标签: c pointers gcc

我正在处理来自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

我真的不知道该怎么做。您对如何解决此错误有任何想法吗?

3 个答案:

答案 0 :(得分:7)

该行无法编译,因为它在本书中不正确。来自author's Errata page

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

答案 1 :(得分: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.

答案 2 :(得分:1)

p2的类型为int*a1[2]的类型为int,因此*a1[2]毫无意义。你确定你完全复制了作业问题吗? (如果是这样,那么糟糕的家庭作业问题就会发生。)