Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';该指针是否获取数组索引处的值? #包括 使用名称空间std; int func(int arg0,int*arg1,int*arg2); int main(){ int*b; intz; INTA[10]; z=func(*a[0],&a[z],b+a[4]); }_C++_Arrays_Pointers - Fatal编程技术网

C++ 为什么';该指针是否获取数组索引处的值? #包括 使用名称空间std; int func(int arg0,int*arg1,int*arg2); int main(){ int*b; intz; INTA[10]; z=func(*a[0],&a[z],b+a[4]); }

C++ 为什么';该指针是否获取数组索引处的值? #包括 使用名称空间std; int func(int arg0,int*arg1,int*arg2); int main(){ int*b; intz; INTA[10]; z=func(*a[0],&a[z],b+a[4]); },c++,arrays,pointers,C++,Arrays,Pointers,上面的以下代码给出了一个错误“一元'*'(have'int')的无效类型参数”。我知道*在声明中使用时会创建一个指针,当与变量名一起使用时,它会获取存储在该指针上的值。在函数func()中,它接受3个参数,1个int和2个int指针。我认为传入函数的第一个参数给了我一个错误,但我不理解为什么。*a[0]不应该获取a数组中声明为int的第一个元素的值吗 *a[0]与**a相同 给定声明inta[10],应该很清楚您不能两次取消引用a 如果您想要数组的第一个元素a,那么它就是a[0] 您也可以将示例

上面的以下代码给出了一个错误“一元'*'(have'int')的无效类型参数”。我知道
*
在声明中使用时会创建一个指针,当与变量名一起使用时,它会获取存储在该指针上的值。在函数
func()
中,它接受3个参数,1个int和2个int指针。我认为传入函数的第一个参数给了我一个错误,但我不理解为什么。
*a[0]
不应该获取
a
数组中声明为int的第一个元素的值吗

*a[0]
**a
相同

给定声明
inta[10],应该很清楚您不能两次取消引用
a

如果您想要数组的第一个元素
a
,那么它就是
a[0]

您也可以将示例简化为这样,但仍然会得到相同的错误:

#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]);
}

否,在指针上使用*时会取消对指针的引用。但是[0]已经相当于:

int main() {
    int a[10];
    int b = *a[0];
}
*(a + 0) // And since the offset is 0, this is equivalent to *a.
换句话说,取消对已偏移的数组开头的指针的引用,以便在给定的“索引”处为您提供项的值。您所写的内容相当于:

int main() {
    int a[10];
    int b = *a[0];
}
*(a + 0) // And since the offset is 0, this is equivalent to *a.

因此,您试图“取消引用”一个int,这是行不通的。由于*不是int的有效一元运算符,因此会失败并导致出现您看到的错误。

*
不是int的一元运算符。这正是
a[0]
的含义。因此,当访问数组中的元素时,它会自动取消对它的引用?@AvP本质上,是的-它取消对已被指定索引偏移的指针的引用-我在回答中添加了对此的解释。