各位老师们帮我逐层解释一下吧: *(int *)&f ?

发布于 2022-07-29 17:43:01 字数 696 浏览 25 评论 9

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

花开雨落又逢春i 2022-08-06 10:28:39

是否可以将 *(int*)&f 写成 (int)*f 呢?

[ 本帖最后由 lvziwei 于 2008-2-20 22:10 编辑 ]

遗心遗梦遗幸福 2022-08-06 10:27:03

原帖由 lvziwei 于 2008-2-20 21:49 发表
六楼说的好,确实是!
可是我想知道的是那串*&什么的到底是什么意思

前面几个兄弟以及解释很清楚了啊,如果还不明白,去多看看书吧。

孤独难免 2022-08-06 08:43:50

六楼说的好,确实是!
可是我想知道的是那串*&什么的到底是什么意思

表情可笑 2022-08-06 07:59:12

那为什么不写成  *&f  呢?

飘然心甜 2022-08-06 07:45:54

楼主的程序是错的,这个程序不能判断参数是浮点数还是整型数。

补充,应该是不管任何输入都是作为int型对待的,如果把这个函数做成宏,就可以检查变量是浮点型还是整型。

[ 本帖最后由 cugb_cat 于 2008-2-20 21:57 编辑 ]

牵强ㄟ 2022-08-04 15:43:04

原帖由 lvziwei 于 2008-2-20 21:29 发表
将地址转换成是一个int*型,int*型是什么型?
“(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型”---加入分配给f的地址是2002,地址就是地址,它是怎么能强制转换成int*型的呢?

把地址强制转换成(int*)是给最前面的*看的, 此时的地址就是指向一个int类型, 那么通过解引用(即最前面的*)得到的值也就是一个int类型.
你可以看看<C和指针>上面的指针那一章的内容.

匿名。 2022-08-04 08:39:05

将地址转换成是一个int*型,int*型是什么型?
“(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型”---加入分配给f的地址是2002,地址就是地址,它是怎么能强制转换成int*型的呢?

妄想挽回 2022-08-04 01:32:50

你给的几个运算符都是由右向左结合的

&f
(int *) (&f)
*((int *) &f)

PS: 看错, 传入参数是int类型...

[ 本帖最后由 Edengundam 于 2008-2-20 21:30 编辑 ]

错々过的事 2022-08-03 09:17:43

&f即取f的地址.
(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型
*(int*)&f即取这个地址的内容. 为一个int类型.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文