*(int *)&a和(int &)a啥区别

ai_shui_shou 2012-08-09 11:07:16
前者是一个c语言例子上的,意思是a地址处内容按整形取出,这个明白,但是加上另一句就不行了,如下:
#include <stdio.h>
int main()
{
float a = 12.5;
printf("%d\n", (int)a);
printf("%d\n", *(int *)&a);
//printf("%d\n", (int &)a);//xxx//dereferencing type-punned pointer will break strict-aliasing rules
return 0;
}

//xxx处的句子是在一个c++程序里见的(http://blog.sina.com.cn/s/blog_96551047010122m9.html),但是换成c++也是同样错误啊!我怎么不记得c语言哪里见过(int &)?但c++貌似也不认啊?
...全文
947 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
FCARM 2012-08-28
  • 打赏
  • 举报
回复
好像你的写法有点怪怪的
fzamygsd 2012-08-10
  • 打赏
  • 举报
回复

//printf("%d\n", (int &)a);//xxx//dereferencing type-punned pointer will break strict-aliasing rules


在C++里&前面有类型名的时候,表示引用,

但是引用一般在声明的时候,或函数参数的时候使用的,而且必须初始化,,,,,

写成楼主,都不满足条件

编译器不认为是c++的引用,也不认为是C/C++取地址,

让编译器情何以堪,,,,,,,

kicuass-wongshung 2012-08-10
  • 打赏
  • 举报
回复
//printf("%d\n", (int &)a);//

应改成

//printf("%d\n", (int *)a);//

强制转换可不是像你那样写的。。
linuxblack125125 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 可以强制转化吗 ?
[/Quote]

++
V____ 2012-08-10
  • 打赏
  • 举报
回复
第二种写法不是对的吧?
夏天__ 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

(int &)a这种写法是不不合法的,C编译器不能够解析通过。
[/Quote]
AnYidan 2012-08-10
  • 打赏
  • 举报
回复
引用 可以强制转化吗 ?
xiaohuh421 2012-08-10
  • 打赏
  • 举报
回复
DWORD a = 10;
int &b = (int &)a;

楼主看这句也话就明白了吧.
xxb249 2012-08-10
  • 打赏
  • 举报
回复
(int &)a 这个是不是引用啊?? 不太习惯C++用法
自信男孩 2012-08-10
  • 打赏
  • 举报
回复
(int &)a这种写法是不不合法的,C编译器不能够解析通过。
cao_julians 2012-08-10
  • 打赏
  • 举报
回复
(int &)a----没有(int &)这个操作符
pengzhixi 2012-08-10
  • 打赏
  • 举报
回复
c里面是没有引用这种概念的
mcadcj 2012-08-10
  • 打赏
  • 举报
回复
*(int *)&a先取a的地址,把其转换成int型的指针,再取指针指向的值。
另外一种,我记得没这用法。
fzamygsd 2012-08-10
  • 打赏
  • 举报
回复
printf("%d\n",*(int*)&a);


打印对比下

http://blog.csdn.net/mobidogs/article/details/1530775
fzamygsd 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
引用 9 楼 的回复:

引用 可以强制转化吗 ?


虽然不知道其它IDE是否可以, 但是VS2008亲测, 是可以强制转换的.
不知道C++标准里是怎么说的哈, 但引用从汇编级来看就是跟指针一样,强制转换也就没有什么不可了.
[/Quote]

你确定那个是引用吗
xiaohuh421 2012-08-10
  • 打赏
  • 举报
回复
DWORD dwVal = 0;
BYTE &bytVal = (BYTE &)dwVal;
bytVal = 0x1F;

WORD &wordVal = (WORD&)dwVal;
wordVal = 0x2F3F;

int &iVal = (int &)dwVal;
iVal = 0x4F5F6F7F;

BYTE buf[0x10] = {0};
WORD &wVal = (WORD&)(*(WORD*)buf);
wVal = 0x8F9F;

以上的强制转换都是可以的. 其它类型类似.
xiaohuh421 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 可以强制转化吗 ?
[/Quote]

虽然不知道其它IDE是否可以, 但是VS2008亲测, 是可以强制转换的.
不知道C++标准里是怎么说的哈, 但引用从汇编级来看就是跟指针一样,强制转换也就没有什么不可了.
ForestDB 2012-08-10
  • 打赏
  • 举报
回复
先弄清楚哪些是C里面的,哪些是C++里面的。
titer1 2012-08-09
  • 打赏
  • 举报
回复
有后int &m吗

69,391

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧