aka*_*ash 1 c c++ pointers casting
在最近的微软访谈中提出了以下问题.
这两个声明有什么区别?
int p=*(int*)i;
int p=*(int*)&i;
Run Code Online (Sandbox Code Playgroud)
我认为第一个i是指针,第二个i是变量.
还有别的事吗?
第一个是获取包含的值i,将其视为指针,并检索int该地址的任何值(如果可能).
第二个获取地址i,将其转换为指向int的指针,并检索该地址的值.如果i是int,它相当于p=i;.如果不是,它将CHAR_BIT *sizeof(int)从地址开始i,并且(尝试)将它们视为一个int,并分配创建的任何值p.
编辑:是的,作为@R.Martinho Fernandes指出,如果i有一个超载operator &,它可能会做一些与上述任何不同的东西(即,不是i它的地址将从它的operator &返回开始).