C_and_CPP 板


LINE

请教一个 Pointer的情况 有两个变数是这样宣告的 void *arg; int i = 10; arg = (void *) i; 不懂的是 为而arg在assign时是这样做呢 而不是这样 arg = &i; 麻烦各位帮我解惑 谢谢 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.105.238
1F:推 QQ29:原因是void *能指向任何东西嘛? 03/31 12:33
2F:→ QQ29:可是我有个疑惑 我照你这样写 会出现警告 03/31 12:34
3F:→ QQ29:warning C4312: '型别转换' : 将 'int' 转换为较大的'void * 03/31 12:34
4F:→ QQ29:不是应该一样size都是4吗???? 03/31 12:34
5F:推 yshihyu:应该是要 arg = (void *) &i; 才对 03/31 12:34
6F:→ QQ29:照他这样写要用的时候 直接cast成 int就可以了 03/31 12:35
7F:→ yshihyu:不会有警告~ 两边都是 void* 语法合法 03/31 12:35
8F:推 QQ29:喔我是说他这种写法 03/31 12:37
9F:推 yshihyu:它应该要练习用 void* 03/31 12:38
10F:推 QQ29:这样写也可以过 难道是void*无敌吗? 为啥会有警告说大小不合 03/31 12:40
11F:推 yshihyu:arg = (void *) i; 这语法没错~ 但用错 把这样是把 10 03/31 12:43
12F:→ yshihyu:当作位址给 arg ... 10 这位址根本不合法 03/31 12:44
13F:推 VictorTom:arg = (void*)&i 和 (void*)i 都合法, 只是结果不同.... 03/31 12:59
14F:→ VictorTom:10这个位址不合法没错, 不过偶尔好像也会见到这种用cast 03/31 13:00
15F:→ VictorTom:来做某写特别的passing/处理的样子@_@" 03/31 13:01
16F:推 VictorTom:顺便回2F, 用DevC++ 4.9.9.2测好像不会有warning.... 03/31 13:03
17F:→ VictorTom:话说回来, 小转大应该OK, 大转小通常才可能有问题不是?? 03/31 13:04
18F:推 yshihyu:这边没size 问题~ 这边都是4byte 03/31 13:06
19F:推 VictorTom:在32 bits环境应该是都OK; 不过小弟是说2F说的warning 03/31 13:08
20F:→ VictorTom:假如真的不match, 小转大应该也不会是什麽问题啊@_@" 03/31 13:09
21F:推 QQ29:可是他们不是同样大小嘛? 03/31 13:30
22F:推 VictorTom:我这边测出来是, 所以您的结果是挺奇怪的:) 03/31 13:34
23F:→ VictorTom:刚刻意测一个char c=10; void *p=(void*)c; 03/31 13:35
24F:→ VictorTom:这个例子DevCpp就会报warning: difference size了@_@" 03/31 13:35
25F:→ VictorTom:所以Q大您真要查, 就sizeof()查一下两个变数吧....XD 03/31 13:36
26F:推 yshihyu:char c=10; void *p=(void*)c; // 这样会出现警告是正常的 03/31 13:45
27F:→ yshihyu:(void*)c; 又不是把 c 真的把 变成 4byte 03/31 13:46
28F:推 yshihyu:void *p=(void*)&c; 改成这样就OK 03/31 13:49
29F:推 yshihyu:应该是说 指标型态转型只可以用在 address , c 是整数型态 03/31 13:52
30F:推 VictorTom:我懂y大您的意思, 不过我现在就是没有要取address.... 03/31 13:55
31F:→ VictorTom:现在就是纯粹刻意要把一个数cast成address来用.... 03/31 13:56
32F:推 yshihyu:对~ (void*) (int*) etc 指标这种转换必须用在address 03/31 13:56
33F:→ VictorTom:用char转只是要做出Q大遇到的warning问一下size的问题. 03/31 13:56
34F:→ yshihyu:&c 才是address of ... c 是整数 03/31 13:56
35F:→ yshihyu:我印象中我以前在书上看过~ 不过我忘记在哪本书看过 03/31 13:57
36F:→ VictorTom:所以char是刻意搞的特例; 但是int->void*这种case不是没 03/31 13:57
37F:→ VictorTom:有, 有可能design上int本来的值就是个address, 这样做的 03/31 13:57
38F:→ VictorTom:好坏先不论, 但是的确有这种int值存address的作法.... 03/31 13:58
39F:→ yshihyu: void *p=(void*)(int)c; 你改这样编译你就知道 03/31 13:58
40F:→ yshihyu:这样阿~ 03/31 14:00
41F:→ MOONRAKER:widening coercion理论上的确不该出warning 03/31 14:01
42F:推 VictorTom:用VC2005试int i=10; void *p=(void*)i; 的个case.... 03/31 14:04
43F:→ VictorTom:真的有 convert "int to void*" of greater size的warn 03/31 14:06
44F:→ VictorTom:不过对int和void* sizeof都是4, 是小弟我英文不好吗Orz 03/31 14:06
45F:→ VictorTom:话说上面那段修正一下, 通常会用unsigned的而非signed:) 03/31 14:07
46F:推 yshihyu:我觉得这边译器有差异~ 可能要查ANSI .. 03/31 14:11
47F:推 VictorTom:补充, VC2005试char c=10; void *p=(void*)c; 的case. 03/31 14:11
48F:→ VictorTom:竟然完全没有warning, 我开始怀疑是MS自己在耍宝....Orz 03/31 14:12
49F:→ VictorTom:照y大的加(void*)(int)c; DevCpp没warn, VC2005有warn. 03/31 14:12
50F:推 yshihyu:其实这种情况很多~ 满多小地方ANSI 也没定义~编译器实作 03/31 14:13
51F:→ yshihyu:上就有差异 03/31 14:13
52F:→ VictorTom:就像y大说的, 看来compiler有差, 那留给强者查吧....XD 03/31 14:13
53F:推 cplusplus:语意问题罢了 其实想怎麽写都可以 知道自己在干嘛就好 03/31 14:14
54F:推 VictorTom:的确是语意问题, 只是有时候这种warning可能会造成 03/31 14:15
55F:→ VictorTom:prefast build过不了吧? 如果是compiler问题就满鸟的Orz 03/31 14:16
56F:→ OpenBigJue:....上面是吵起来了吗... 03/31 14:55
57F:→ OpenBigJue:其实这只是存取特定记忆体位址的值罢了 嵌入式常用到 03/31 14:57
58F:推 sunneo:没有吵啊 只是讨论热烈 03/31 19:53
59F:→ sunneo:MSVS你可以试试看,你用unsigned long long 转void*反而没有 03/31 19:54
60F:→ sunneo:但事实上sizeof(void*)却又是4 byte 所以有可能是....... 03/31 19:54
61F:→ sunneo:可能是64位元可携性警告吧,把它关掉看看 03/31 19:55
62F:推 VictorTom:谢楼上:) 话说MSVS有些warn真的满烦的, 还有一个常见的 03/31 21:52
63F:→ VictorTom:就是str###()和str###_s(), 上次差点不小心把func换掉. 03/31 21:53
64F:→ VictorTom:幸好主管提醒, 不然挂掉OS build的话小弟就要被定了Orz 03/31 21:54
65F:→ VictorTom:挂掉其他OS的build, 漏字; 本来想用#define / #if来弄. 03/31 21:55
66F:→ VictorTom:偏偏就是有地方用到要回传char*的, 好像是strstr吧@_@" 03/31 21:56







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP