Re: [問題] STRUCTURE 可以當C函式的引數嗎?
觀念不太清楚,想再延伸一下我的問題...
現我有一個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
→
08/28 10:39, , 1F
08/28 10:39, 1F
推
08/28 12:05, , 2F
08/28 12:05, 2F
→
08/28 12:38, , 3F
08/28 12:38, 3F
附上我的片斷程式碼,我定義了一個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
→
08/29 08:28, , 4F
08/29 08:28, 4F
→
08/29 09:36, , 5F
08/29 09:36, 5F
推
08/29 17:20, , 6F
08/29 17:20, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章