为什么这个指针不能获得数组索引的值?

时间:2014-10-02 04:55:52

标签: c++ arrays pointers

#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的第一个元素的值吗?

2 个答案:

答案 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的有效一元运算符,因此失败并导致您看到的错误出现。