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/m.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燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP