指针类形转换

小清新爱大光明 2011-10-16 05:30:40
int a, *b;

b = (int *)a;

这样可以嘛?
若可以的话,a未初始化,转换后b的值也只是0xcccccccc,和没执行一样,有意义嘛?
...全文
132 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
追求执着 2011-10-17
  • 打赏
  • 举报
回复

强制转换本来就不安全的!
nand库路泽 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pqpqr 的回复:]

谢谢1楼, 你说的都知道 就是虽然编译器通过了 b = (int *)a; 但是这语句是对的嘛?个人感觉不对。
[/Quote]对着的啊,格式转换!!
赵4老师 2011-10-17
  • 打赏
  • 举报
回复
如果是全局变量而且是在DOS下的话,b指向INT0的低字。
  • 打赏
  • 举报
回复
这是道面试题,多选。不知道该不该选。
AndyZhang 2011-10-17
  • 打赏
  • 举报
回复
这样没意义
York·Zhang 2011-10-16
  • 打赏
  • 举报
回复
这样做是把a的值设为b的地址;
语法上没有错
希望你能理解,这样做是比较危险的
QQ551780977 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cfjtaishan 的回复:]
这样做我看没什么意思吧, 如果你是将一个int型指针转化成char型指针会有点意思,反之依然。
[/Quote]
int 4个字节,char 一个字节,从int 转char 好像不合常理..
pathuang68 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pqpqr 的回复:]

谢谢1楼, 你说的都知道 就是虽然编译器通过了 b = (int *)a; 但是这语句是对的嘛?个人感觉不对。
[/Quote]

这样写的语法是没有错的。a是一个int,而所有的指针都是int,所以形如b = (int *)a; 将一个int转换成一个指针,在语法上是木有问题的。

问题是这样的做法比较危险,在实际工作中绝大部分情况下都要避免这样的做法。
自信男孩 2011-10-16
  • 打赏
  • 举报
回复
这样做我看没什么意思吧, 如果你是将一个int型指针转化成char型指针会有点意思,反之依然。
Athenacle_ 2011-10-16
  • 打赏
  • 举报
回复
从语法来说,是对的,但逻辑是否出错就看程序员的了
changer001 2011-10-16
  • 打赏
  • 举报
回复
for(i = 1; i < 100; i++)
{
d = i;
if(((d + 1) % 2 ==0) && ((d + 2) % 3 == 0) && ((d + 3) % 7 == 0 ))
printf("%4d", d + 3);
}
最终的结果是打印 (d + 3)
changer001 2011-10-16
  • 打赏
  • 举报
回复
b = (int *)a;如果a的默认值是该编译器的有效地址的范围之内,那么将它强制转换为地址是可行的,这种方法在嵌入式中用的比较多,比如说将一个字面值0xB0000000设为地址,那么就应该写成 b = (int *)0xb0000000;
  • 打赏
  • 举报
回复
如果这是道是非题,那int a, *b;b = (int *)a; 是对的还是错的?

「已注销」 2011-10-16
  • 打赏
  • 举报
回复
编译器只管你语法语义相关问题,

比如,汉语“你爱她”,编译器只管这句话语法对不对,如果符合汉语,就可以了,至于,你该不该爱她,编译器就不管了,那是你个人的问题。
fukang258369 2011-10-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pqpqr 的回复:]
谢谢1楼, 你说的都知道 就是虽然编译器通过了 b = (int *)a; 但是这语句是对的嘛?个人感觉不对。
[/Quote]
编译器没有那么聪明,它可以这样理解:把a当成是一个地址值,然后赋给指针b,毕竟指针的值是地址的大小,也是个整数。--------个人意见。
  • 打赏
  • 举报
回复
谢谢1楼, 你说的都知道 就是虽然编译器通过了 b = (int *)a; 但是这语句是对的嘛?个人感觉不对。
changer001 2011-10-16
  • 打赏
  • 举报
回复
int a, *b;:a是int型变量,没有初始化;b是指向int型的指针;
b = (int *)a; :将int型的a强制转换为指针变量,将此指针赋值到指针变量b;
强制转换的是a的类型,这样a默认初始化的值就成为指针变量b的值,即b = 0Xcccccccc(默认);
呵呵呵,希望能帮到你!

69,382

社区成员

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

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