最近的微软采访中提到了以下问题。
这两个声明之间有什么区别?
int p=*(int*)i;
int p=*(int*)&i;
我认为在第一个i
是一个指针而在第二个i
是一个变量。
还有别的吗?
答案 0 :(得分:9)
第一个是获取i
中包含的值,将其视为指针,并检索该地址处的int
值(如果可能)。
第二个获取i
的地址,将其转换为指向int的指针,并检索该地址的值。如果i
是int
,则相当于p=i;
。如果不是,它将从CHAR_BIT *sizeof(int)
的地址开始采用第一个i
位,并(尝试)将它们视为int
,并将创建的任何值分配给{ {1}}。
编辑:是的,作为@R。 Martinho Fernandes指出,如果p
有一个过载的i
,它可能会做一些与上述任何一个不同的事情(即,而不是operator &
的地址,它将从任何开始它的i
返回)。
答案 1 :(得分:0)
如果你知道这种语言,那么这个问题归结为
之间的区别i
和
&i
答案是,在第一种情况下,它是i
,在第二种情况下,它是i
的地址,然后您将所有这些转换用于这两种情况中的任何一种。