[問題] 指標傳遞問題

看板C_and_CPP (C/C++)作者時間9年前 (2016/12/02 19:12), 9年前編輯推噓3(3016)
留言19則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) LINUX 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) GCC 問題(Question): 宣告一個struct typedef struct { uint8_t var_a; uint8_t var_b; } test_entry_t; 宣告一個指標 test_entry_t *p_entry 宣告一個function function testF(test_entry_t *p_entry){ uint8_t var1 = 0x01 uint8_t var2 = 0x02 p_entry->var_a = var1 p_entry->var_b = var2 } 我嘗試用以下方是來call此function int main(){ test_entry_t *p_entry testF(&p_entry); printf("0x%02X\n", p_entry->var_a); printf("0x%02X\n", p_entry->var_b); 預計輸出結果 0x01 0x02 但是我印出來卻是空的! 想請問各位大大我這段code哪裡寫錯了! 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.192.107 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480677124.A.B8D.html ※ 編輯: blueguan (1.164.192.107), 12/02/2016 19:13:00 ※ 編輯: blueguan (1.164.192.107), 12/02/2016 19:13:38

12/02 19:13, , 1F
你想要讓 testF 填入 p_entry 指向的東西, 那在傳進 testF
12/02 19:13, 1F

12/02 19:13, , 2F
時就必須要給一個實際上指向那個 struct 的指標
12/02 19:13, 2F

12/02 19:14, , 3F
你這樣寫變成傳入一個指向指標的指標, 所以就會有問題
12/02 19:14, 3F

12/02 19:14, , 4F
正確的做法是 test_entry_t entry; testF(&entry);
12/02 19:14, 4F

12/02 19:14, , 5F
或者如果你的 struct 是 malloc 來的話:
12/02 19:14, 5F

12/02 19:15, , 6F
test_entry_t *p_entry = (test_entry_t)malloc(...);
12/02 19:15, 6F

12/02 19:15, , 7F
testF(p_entry); 這樣子
12/02 19:15, 7F

12/02 19:16, , 8F
啊, 上上行少一個 *, 總之意思應該到了
12/02 19:16, 8F

12/02 19:17, , 9F
test_entry_t **p_entry = (test_entry_t)malloc(...);
12/02 19:17, 9F

12/02 19:17, , 10F
這樣嗎?
12/02 19:17, 10F

12/02 19:18, , 11F
是轉型少了 *...
12/02 19:18, 11F

12/02 19:25, , 12F
est_entry_t *p_entry = (test_entry_t *)malloc(...);
12/02 19:25, 12F

12/02 19:26, , 13F
這樣嗎?
12/02 19:26, 13F

12/02 19:38, , 14F
我改完好像~還是沒有把值塞進去
12/02 19:38, 14F

12/02 19:40, , 15F
預期輸出的正確結果:
12/02 19:40, 15F
※ 編輯: blueguan (1.164.192.107), 12/02/2016 19:46:48

12/02 19:47, , 16F
我加入預期輸出結果了...
12/02 19:47, 16F

12/02 19:54, , 17F
12/02 19:54, 17F

12/02 20:07, , 18F
感謝各位大大~~已經可以了!!!! 各位太威了..
12/02 20:07, 18F

12/02 20:07, , 19F
所以我必須要宣告給空間才可以
12/02 20:07, 19F
文章代碼(AID): #1OGLS4kD (C_and_CPP)
文章代碼(AID): #1OGLS4kD (C_and_CPP)