各位老师们帮我逐层解释一下吧: *(int *)&f ?
void fun(int f)
{
int a = (int)f;
if ((*(int *)&f) == (*(int *)&a)) {
printf("f is INTn"); // 是整型
... ...
} else {
printf("f is FLOATn"); // 是浮点数
... ...
}
.... .......
}
*(int *)&f 是什么意思呢?各位老师们帮我逐层详细的解释一下好吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
是否可以将 *(int*)&f 写成 (int)*f 呢?
[ 本帖最后由 lvziwei 于 2008-2-20 22:10 编辑 ]
前面几个兄弟以及解释很清楚了啊,如果还不明白,去多看看书吧。
六楼说的好,确实是!
可是我想知道的是那串*&什么的到底是什么意思
那为什么不写成 *&f 呢?
楼主的程序是错的,这个程序不能判断参数是浮点数还是整型数。
补充,应该是不管任何输入都是作为int型对待的,如果把这个函数做成宏,就可以检查变量是浮点型还是整型。
[ 本帖最后由 cugb_cat 于 2008-2-20 21:57 编辑 ]
把地址强制转换成(int*)是给最前面的*看的, 此时的地址就是指向一个int类型, 那么通过解引用(即最前面的*)得到的值也就是一个int类型.
你可以看看<C和指针>上面的指针那一章的内容.
将地址转换成是一个int*型,int*型是什么型?
“(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型”---加入分配给f的地址是2002,地址就是地址,它是怎么能强制转换成int*型的呢?
你给的几个运算符都是由右向左结合的
&f
(int *) (&f)
*((int *) &f)
PS: 看错, 传入参数是int类型...
[ 本帖最后由 Edengundam 于 2008-2-20 21:30 编辑 ]
&f即取f的地址.
(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型
*(int*)&f即取这个地址的内容. 为一个int类型.