int p = *(int *)i和int p = *(int *)& i之间的差异

时间:2012-07-05 18:11:33

标签: c++ c pointers casting

最近的微软采访中提到了以下问题。

这两个声明之间有什么区别?

int p=*(int*)i; 
int p=*(int*)&i; 

我认为在第一个i是一个指针而在第二个i是一个变量。
还有别的吗?

2 个答案:

答案 0 :(得分:9)

第一个是获取i中包含的值,将其视为指针,并检索该地址处的int值(如果可能)。

第二个获取i的地址,将其转换为指向int的指针,并检索该地址的值。如果iint,则相当于p=i;。如果不是,它将从CHAR_BIT *sizeof(int)的地址开始采用第一个i位,并(尝试)将它们视为int,并将创建的任何值分配给{ {1}}。

编辑:是的,作为@R。 Martinho Fernandes指出,如果p有一个过载的i,它可能会做一些与上述任何一个不同的事情(即,而不是operator &的地址,它将从任何开始它的i返回)。

答案 1 :(得分:0)

如果你知道这种语言,那么这个问题归结为

之间的区别
i

&i

答案是,在第一种情况下,它是i,在第二种情况下,它是i的地址,然后您将所有这些转换用于这两种情况中的任何一种。