[問題] union & 二維陣列

看板C_and_CPP (C/C++)作者 (相框中的世界)時間5年前 (2019/12/26 15:09), 5年前編輯推噓1(1012)
留言13則, 2人參與, 5年前最新討論串1/1
嗨 最近再看union的功能,有看過一些介紹與使用範例, 不過看了一些範例的使用方式,都沒有目前想要實現的功能。 以下面例子為例 volatile union{ unsigned char Table_ALL[2]; union { unsigned char Byte ; struct { unsigned char C1_1:1; unsigned char C1_2:1; unsigned char C1_3:1; unsigned char C1_4:1; unsigned char C1_5:1; unsigned char C1_6:1; unsigned char C1_7:1; unsigned char C1_8:1; }BIT; } S1_C1; union { unsigned char Byte ; struct { unsigned char C2_1:1; unsigned char C2_2:1; unsigned char C2_3:1; unsigned char C2_4:1; unsigned char C2_5:1; unsigned char C2_6:1; unsigned char C2_7:1; unsigned char C2_8:1; }BIT; } S1_C2; }Table; Table.S1_C1.Byte看到的資料等同Table.Table_ALL[0] Table.S1_C2.Byte看到的資料等同Table.Table_ALL[1] 後來我想說是不是可以在裡面宣告一個二維陣列 Table_ALL[2][2] 來使用呢? 因此我在裡面把 Table_ALL[2] 改為 Table_ALL[2][2] 經過Debug模式看到原本的 S1_C1 是放在 Table_ALL[0][0], S1_C2 是放在 Table_ALL[0][1] 裡面了沒錯 但是我該如何把在裡面增加一個S2_C1放在Table_ALL[1][0]裡面呢? 目前好像都沒有找到這樣的使用方式,不曉得有沒有人用過。 最後感謝各位花時間看這個問題 :)) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.1.168 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1577344159.A.770.html

12/26 19:03, 5年前 , 1F
我覺得你的 union 跟我認識的不太一樣...
12/26 19:03, 1F

12/26 19:04, 5年前 , 2F
S1_C1、S1_C2 應該在同個位置吧?
12/26 19:04, 2F
你指的同個位置是說,修改S1_C1會把S1_C2和Table_ALL[0]一起改掉嗎? 我實際用Debug模式去看他是我上面說的那樣,如果我再加一組S1_C3下去的話 他是跟S1_C1跟Table_ALL[0]共用同個記憶體的 不曉得關鍵字要下甚麼會比較多我要的例子,目前找很久都只有一般union的範例 :(( ※ 編輯: news9801 (115.43.145.7 臺灣), 12/26/2019 21:13:34

12/26 22:14, 5年前 , 3F
你的 debugger 真的這樣顯示?還是貼上來的 code 不一
12/26 22:14, 3F

12/26 22:14, 5年前 , 4F
樣?
12/26 22:14, 4F

12/26 22:23, 5年前 , 5F
Sorry 我剛剛在仔細看一次發現我少打了 這邊補上連結 https://ideone.com/ZH9iLg

12/27 02:38, 5年前 , 6F
宣告union結構,再用它當資料類型宣告陣列
12/27 02:38, 6F
※ 編輯: news9801 (61.216.1.168 臺灣), 12/27/2019 08:35:09 剛剛我試了一下發現可以,我把程式的連結補在這邊 感謝各位,用了一下ipraxde使用的ideone覺得滿好用的XD https://ideone.com/Aye6ET ※ 編輯: news9801 (61.216.1.168 臺灣), 12/27/2019 09:08:01

12/27 12:28, 5年前 , 7F
這樣跟宣告 union Sx_Cx var[a][b]; 好像沒多少區別啊.
12/27 12:28, 7F

12/27 12:28, 5年前 , 8F
..
12/27 12:28, 8F
Lipraxde說的這個部分有範例讓我參考嗎:D ※ 編輯: news9801 (61.216.1.168 臺灣), 12/27/2019 14:50:29

12/27 16:26, 5年前 , 9F
跟 johnpage 說的是同個意思:
12/27 16:26, 9F

12/27 16:26, 5年前 , 10F

12/27 16:26, 5年前 , 11F
置底公告有推薦貼程式碼的方法,有很多種
12/27 16:26, 11F
感謝兩位的意見與Lipraxde的範例, 這邊的話我可能沒有說清楚,因為我需要每個Bit都是獨立的, 得用不同名稱做辨認,因此得一個一個建起來。 感謝兩位的回答 :)) ※ 編輯: news9801 (61.216.1.168 臺灣), 12/30/2019 09:02:21

12/30 18:31, 5年前 , 12F
沒看仔細XD,用 union 跟 table 放一起讓我以為都是塞
12/30 18:31, 12F

12/30 18:31, 5年前 , 13F
差不多的東西
12/30 18:31, 13F
文章代碼(AID): #1U15oVTm (C_and_CPP)
文章代碼(AID): #1U15oVTm (C_and_CPP)