C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) 单晶片开发 PIC18 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) CX8 compiler 额外使用到的函数库(Library Used): (Ex: OpenGL, ...) None 问题(Question): 关於这段code指标的操作觉得不太正常, 想请教版友帮我确认观念 程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档) 定义与宣告部分: typdef struct{ int A; char *data; } MSG_OBJ typedef struct{ int B; char useData[8]; } MSG_OBJ_USE char globalData[8] = {0}; void getDataFun(MSG_OBJ* b) { b->data = globalData; } MSG_OBJ_USE obj; 以上是定义与宣告, 接下来呼叫时传入obj (特别处为obj之type是MSG_OBJ_USE) getDataFun(&obj); 之後这段code执行 //Step.1 char* ptr = (char*)(*(uint16_t*)obj.useData); //平台指标为16 bits //Step.2 for(int i=0;i<8;i++); { obj.useData[i] = ptr[i]; } //问题: Step1.的动作意思是useData array上面放的值是指标, 所以才可以取值(*)给ptr 然後用step2把copy资料. 我的疑问是b->data = globalData应该是把&globalData[0] 指定给b->data而已. 谢谢回答!! 补充说明(Supplement): --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.184.52 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1655287244.A.D2B.html
1F:推 LPH66: 来跟我说一次: 「阵列不等於指标」 06/15 18:58
2F:→ LPH66: 所以你在 getDataFun() 这里把一个不相容的结构传进去了 06/15 18:59
3F:→ LPH66: 你可能需要厘清一下到底 _USE 结构是要怎麽用 06/15 19:02
4F:→ LPH66: 应该不会是像你这样硬传进去 06/15 19:03
5F:→ chaos1993: 看完的理解是getDataFunc(&obj) 将obj.usedata纪录glo 06/16 00:26
6F:→ chaos1993: baldata[0]的记忆体位置,所以step1才取值拿到globald 06/16 00:26
7F:→ chaos1993: ata[0]位置并assign给char* 06/16 00:26
8F:→ chaos1993: 但这种不相容strict可以过..?compiler相对不严谨吗 06/16 00:28
9F:→ chaos1993: 更正struct 06/16 00:28
10F:推 god145145: PIC用XC8比较多,你要不要换一下 06/16 09:16
11F:→ Lipraxde: 他是用 XC8 吧 XD? 06/16 10:37
12F:→ ando5566: 是XC8没错 抱歉打反了 06/16 14:02
13F:推 OnlyRD: 你根本没有拷贝阵列吧?只是破坏了原本的struct的 06/16 20:18
14F:→ OnlyRD: 占一个pointer 06/16 20:18
15F:→ OnlyRD: 的记忆体。 06/16 20:18
16F:推 OnlyRD: 喔喔你是要复制资料到global的array去吗?这写法 06/16 20:30
17F:→ OnlyRD: 实在难不出有 06/16 20:30
18F:→ OnlyRD: 什麽理由要这样做,感觉像故意隐藏起来,也许是che 06/16 20:30
19F:→ OnlyRD: cksum还是防伪 06/16 20:30
20F:→ OnlyRD: 防盗版?不懂。但这段code看起来挺危险,不过如果 06/16 20:30
21F:→ OnlyRD: 字节对齐没问题 06/16 20:30
22F:→ OnlyRD: ,应该可以动作,但不知道compiler有没有一些奇奇 06/16 20:30
23F:→ OnlyRD: 怪怪的编译设定 06/16 20:30
24F:→ OnlyRD: 要注意。 06/16 20:30
25F:→ sarafciel: 妈呀我看了20分钟才看懂这段code到底想干嘛= = 06/17 02:09
26F:→ sarafciel: https://godbolt.org/z/MM7fY5dPc 这样应该好懂一些 06/17 02:09
27F:→ sarafciel: 我没用过这颗compiler 但应该不至於连union都不支援..? 06/17 02:12
28F:推 CoNsTaR: 叠床架屋下的产物吧 06/17 07:55
29F:→ CoNsTaR: 这段 code 的问题应该只有把 MSG_OBJ_USE* 当作 MSG_OBJ* 06/17 07:55
30F:→ CoNsTaR: 用而已,其他看起来没问题吧 06/17 07:55
31F:→ Lipraxde: C 的 symbol 没有 mangling,变数变成用不同 type 去解 06/17 10:27
32F:→ Lipraxde: 读的失误也很容易发生,说不定也是他这个 obj 能这样传 06/17 10:27
33F:→ Lipraxde: 的原因XD 06/17 10:27
34F:推 OnlyRD: 以前看过类似的东西,叫做GObject,但他是为了提供 06/17 17:43
35F:→ OnlyRD: ABI级的相容性 06/17 17:43
36F:→ OnlyRD: (没记错的话),还有讯号、物件等等,但用GObject写 06/17 17:43
37F:→ OnlyRD: 程式无敌痛苦 06/17 17:43
38F:→ OnlyRD: ,写过一次就希望以後都不要碰到了,一堆代码重复 06/17 17:43
39F:→ OnlyRD: 的功夫。 06/17 17:43







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灯, 水草

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

TOP