看板 C_and_CPP 關於我們 聯絡資訊
觀念不太清楚,想再延伸一下我的問題... 現我有一個STRUCTURE,定義了各種型態總共24位元 名稱叫ST,並命名一個st1變數 struct ST st1 但因為這個st1結構也可看做一個12位元的uint16_t 的12位元陣列 所以我看有些別人寫好的函式在用做函式引數時,會對它做cast,以供其它函式使用 function( (uint16_t (*)[12] ) (st1) ) 有點不能理解,不是應該寫成 function( (uint16_t (*)[12]) (&st1) ) 才對嗎? 所以我一直誤認st1雖然是架構,但其實就是一個指標 到底差異在那..? ※ 引述《qeagle ()》之銘言: : 想請教一下,我定義一個STRUCTURE, : struct ST st1 : st1好像是一個指標,所以可以被當函式傳到FUNCTION中 : 想問 : FUNC(st1)和 : FUNC(&st1)是否一樣 : 又我函式宣告要寫成 : void funt( ST ) 嗎? : 或void func(ST *) : 若我又把它宣告成矩陣型態 : struct ST st1[2]; : 上述問題有變嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.58.180 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440728981.A.627.html
bibo9901: 請附上code 08/28 10:39
kwpn: 我較想問版上的其他版友,這種轉型在業界是常態嗎? 08/28 12:05
uranusjr: 看領域, 在通訊的時候還滿常看到這種方法的 08/28 12:38
附上我的片斷程式碼,我定義了一個CFG_WRITE typedef struct cfgw_tag { union { struct { uint8_t CFGR0; uint8_t CFGR1; uint8_t CFGR2; uint8_t CFGR3; uint8_t CFGR4; uint8_t CFGR5; }; struct { uint8_t ADCOPT :1; uint8_t SWTRD :1; uint8_t REFON :1; uint8_t GPIO :5; uint8_t VUV_8LSB : 8; uint8_t VUV_4MSB : 4; uint8_t VOV_4LSB : 4; uint8_t VOV_8MSB : 8; uint8_t DCC_8LSB : 8; uint8_t DCC_4MSB : 4; uint8_t DCTO : 4; }; }; }CFG_WRITE; 在main中,我宣告cfg_write , 因為將來會用陣列,所以才先用一維 CFG_WRITE cfg_write[1]; 在主程式中,引用別人寫好的的函式,沒取指標(突然發現是否宣告一維陣列關係?) LTC6804_wrcfg(1,(uint8_t (*)[6])cfg_write); 這是在別人的點H檔中,對這個函式宣告的原型 void LTC6804_wrcfg(uint8_t nIC,uint8_t config[][6]); // original ※ 編輯: qeagle (36.227.58.180), 08/28/2015 16:06:38
TobyH4cker: 因為是陣列 08/29 08:28
qeagle: 所以我若宣告沒有[1]成為陣列,就完全不一樣...了解 08/29 09:36
huei820504: 想要指標的話就動態宣告就可以了吧? 08/29 17:20