#include <iostream>
using namespace std;
int func(int arg0, int *arg1, int *arg2);
int main() {
int *b;
int z;
int a[10];
z = func(*a[0], &a[z], b+a[4]);
}
以上代码给出了一个错误“unary'*'的无效类型参数('have'int')”。我知道*
在声明中使用时会创建一个指针,当与变量名一起使用时,它会获得存储在该指针中的值。在函数func()
中,它需要3个参数,1个int和2个int指针。我认为传递给函数的第一个参数是给我一个错误,但我不明白为什么。 *a[0]
不应该获得a
数组中声明为int的第一个元素的值吗?
答案 0 :(得分:1)
*a[0]
与**a
相同。
鉴于声明int a[10];
,应该相当清楚,您无法解除引用a
两次。
如果你想要数组a
的第一个元素,那就是a[0]
。
你也可以简化你的例子,但仍然会得到同样的错误:
int main() {
int a[10];
int b = *a[0];
}
答案 1 :(得分:1)
不,当在指针上使用时,*取消引用指针。但是[0]已经相当于:
*(a + 0) // And since the offset is 0, this is equivalent to *a.
换句话说,取消引用指向已偏移的数组开头的指针,为您提供给定&#39;索引的项目值。你写的内容相当于:
**(a + 0) // And since the offset is 0, this is equivalent to **a.
因此,您正试图“取消引用”&#39;一个没有工作的int。由于*不是int的有效一元运算符,因此失败并导致您看到的错误出现。