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]); }
上面的以下代码给出了一个错误“一元'*'(have'int')的无效类型参数”。我知道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] 您也可以将示例
*
在声明中使用时会创建一个指针,当与变量名一起使用时,它会获取存储在该指针上的值。在函数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本质上,是的-它取消对已被指定索引偏移的指针的引用-我在回答中添加了对此的解释。