use*_*758 2 c++ arrays dereference
C标准6.5.3.2地址和间接运算符(3)表示:
"一元&运算符返回其操作数的地址.如果操作数的类型''类型'',结果的类型''指向类型''.如果操作数是一元*运算符的结果,那么运算符都不是也没有对&运算符进行求值,结果就好像两个都被省略了,除了对运算符的约束仍然适用,结果不是左值."
"83)因此,&*E等于E(即使E是空指针),&(E1 [E2])到((E1)+(E2)).如果E是a,则总是如此函数指示符或作为一元&运算符的有效操作数的左值,*&E是函数指示符或等于E的左值.如果*P是左值并且T是对象指针类型的名称,*(T) P是一个左值,其类型与T指向的类型相符."
所以,如果我理解得好,&*E就好像我们会删除一样&*.然而,
#include <cstdio>
#include <typeinfo>
int main()
{
float A[2];
printf( "name: %s\n", typeid( &*A ).name());
printf( "name: %s\n", typeid( A ).name());
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
会给:
name: Pf
name: A2_f
Run Code Online (Sandbox Code Playgroud)
所以他们不一样.
怎么了?我有什么误会?非常感谢你的帮助,谢谢.