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
感谢大家!!!
六楼说的好,确实是!
可是我想知道的是那串*&什么的到底是什么意思
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: