C++ 为什么使用'int(*p)[5]`的结果如此令人困惑?
我知道C++ 为什么使用'int(*p)[5]`的结果如此令人困惑?,c++,pointers,pointer-to-array,C++,Pointers,Pointer To Array,我知道int(*p)[5]表示指向5个int数组的指针。 因此,我将此程序编码如下: #include <iostream> using namespace std; int main() { int a[5]={0,1,2,3,4}; int (*q)[5]=&a; cout<<a<<endl; cout<<q<<endl; cout<<*q<<endl;
int(*p)[5]
表示指向5个int数组的指针。
因此,我将此程序编码如下:
#include <iostream>
using namespace std;
int main()
{
int a[5]={0,1,2,3,4};
int (*q)[5]=&a;
cout<<a<<endl;
cout<<q<<endl;
cout<<*q<<endl;
cout<<**q<<endl;
return 0;
}
我可以理解*q
表示a[0]
的地址,**q
表示a[0]
的值,但是为什么q
与a
和*q
的值相同呢?在我可怜的心里,这应该是他们的地址!我完全糊涂了。谁来帮帮我。求你了 这样看:
q == &a
*q == a
**q == *a
您没有尝试打印&a
。如果这样做,您将看到它与a
具有相同的值。由于传递性q==a
,和q==a
,以及*q==a
,因此
如果您想知道为什么
&a==a
,请查看,因为数组
自动转换为指针
,该指针只有数组
的地址值。因此,当您试图打印数组时,使用q
和&a
打印数组是指向数组的指针
*q
和a
是“数组”。但是您不能真正地将数组传递给函数(而std::ostream::operator这是否意味着&a==a=&a[0]
?@zyc,不是,但它们都从同一个地址开始。@zyc:是和否,这被称为衰减
,即在大多数上下文中,数组会衰减为指针,而指针的值只是它的第一个元素的地址,它恰好也是数组本身的地址。是的,但我只想打印它的地址。
q == &a
*q == a
**q == *a