| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 410 人关注过本帖
标题:关于强制转换的问题
只看楼主 加入收藏
claire_kig
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-8-21
收藏
 问题点数:0 回复次数:5 
关于强制转换的问题
#include<stdio.h>
int main()
{
   struct TestName
   {
     int Num;
     char *p;
     short a;
     char b[2];
      short c[4];
   }Test,*pTest;

 //  struct TestName Test;
   pTest=&Test;
   Test.Num=12;
   printf("%ld\n",(long *)pTest->Num);
   return 0;
}
为什么答案是12    用short *  强制的时候也得到12 我的小尾存储
搜索更多相关主题的帖子: return 
2013-08-21 09:57
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
(long *)pTest->Num 是指针类型,(short*)pTest->Num 也是指针类型
指针 在printf中对应的是 %p,你用%ld的话,其行为是未定义的
只是碰巧在你的平台上 long 和 指针 的长度一致。(再次提醒一下,即使碰巧长度一致,对指针用%ld其行为也是未定义的)
2013-08-21 10:14
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:0 
LZ有什么疑问?

不管你转化什么类型(整型范围内),你又把这个数输出,结果肯定是12,没有什么疑问吧

虽然你用%ld输出地址,但是也不会报错

除非你输出的前面加上*
printf("%ld\n",*(long *)pTest->Num);这样又会出现因指向12处操作系统不允许的错误

除非你给num赋值在程序栈地址之内,这样的话会输出随机值,至少不会报错

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-21 13:54
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:0 
同意三楼

武功再高也怕菜刀.
2013-08-25 00:17
谢跃锋
Rank: 2
等 级:论坛游民
威 望:2
帖 子:50
专家分:77
注 册:2013-4-14
收藏
得分:0 
反正你只要记住,结构体中最后的答案就是你最后一次赋值的数,所以答案就是12咯
2013-08-26 13:17
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
主要原因在于你是按%d(整型)这格式输出的,

编写的程序,不能改变世界,却可以改变自己...
2013-08-28 13:19
快速回复:关于强制转换的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015691 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved