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

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

void fun(int f)
{
     int a = (int)f;
     if ((*(int *)&f) == (*(int *)&a)) {
              printf("f is INT/n");          // 是整型
          ... ...
     } else {
             printf("f is FLOAT/n");    // 是浮点数
          ... ...
     }

    .... .......
}
*(int *)&f    是什么意思呢?各位老师们帮我逐层详细的解释一下好吗?

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

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

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

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

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

lvziwei
还是不大明白

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

scutan
[quote]原帖由 [i]lvziwei[/i] 于 2008-2-20 21:29 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7984499&ptid=1054995][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
将地址转换成是一个int*型,int*型是什么型?
“(int*)&f即将这个地址转换成是一个int*型, 也就是说这个地址指向的是一个int类型”---加入分配给f的地址是2002,地址就是地址,它是怎么能强制转换成int*型的呢? [/quote]
把地址强制转换成(int*)是给最前面的*看的, 此时的地址就是指向一个int类型, 那么通过解引用(即最前面的*)得到的值也就是一个int类型.
你可以看看<C和指针>上面的指针那一章的内容.

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

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

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

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

lvziwei
感谢大家!!!

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

cugb_cat
[quote]原帖由 [i]lvziwei[/i] 于 2008-2-20 21:49 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7984598&ptid=1054995][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
六楼说的好,确实是!
可是我想知道的是那串*&什么的到底是什么意思 [/quote]
前面几个兄弟以及解释很清楚了啊,如果还不明白,去多看看书吧。

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

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

lvziwei
好人一生好运!

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

Edengundam
[quote]原帖由 [i]lvziwei[/i] 于 2008-2-20 22:06 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7984673&ptid=1054995][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
是否可以将 *(int*)&f 写成 (int)*f 呢? [/quote]

*只能用在指针上. f是数值. :mrgreen:

lvziwei
:shock:

lvziwei
明白啦
多谢大家
好人一生好运