1

在最近的一次微软采访中提出了以下问题。

这两个声明有什么区别?

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

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

4

2 回答 2

9

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

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

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

于 2012-07-05T18:16:00.573 回答
0

如果您知道该语言,那么这个问题可以归结为两者之间的区别是什么

i

&i

答案是,在第一种情况下它是i,在第二种情况下它是地址i,然后你就可以对这两个中的任何一个进行所有这些转换。

于 2012-07-05T18:18:12.523 回答