[問題] 指標傳遞問題

作者: blueguan   2016-12-02 19:12:01
開發平台(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哪裡寫錯了!
感謝
作者: LPH66 (-6.2598534e+18f)   2016-12-02 19:13:00
你想要讓 testF 填入 p_entry 指向的東西, 那在傳進 testF時就必須要給一個實際上指向那個 struct 的指標你這樣寫變成傳入一個指向指標的指標, 所以就會有問題正確的做法是 test_entry_t entry; testF(&entry);或者如果你的 struct 是 malloc 來的話:test_entry_t *p_entry = (test_entry_t)malloc(...);testF(p_entry); 這樣子啊, 上上行少一個 *, 總之意思應該到了
作者: blueguan   2016-12-02 19:17:00
test_entry_t **p_entry = (test_entry_t)malloc(...);這樣嗎?
作者: LPH66 (-6.2598534e+18f)   2016-12-02 19:18:00
是轉型少了 *...
作者: blueguan   2016-12-02 19:25:00
est_entry_t *p_entry = (test_entry_t *)malloc(...);這樣嗎?我改完好像~還是沒有把值塞進去
作者: pttworld (批踢踢世界)   2016-12-02 19:40:00
預期輸出的正確結果:
作者: blueguan   2016-12-02 19:47:00
我加入預期輸出結果了...
作者: james732 (好人超)   2016-12-02 19:54:00
作者: blueguan   2016-12-02 20:07:00
感謝各位大大~~已經可以了!!!! 各位太威了..所以我必須要宣告給空間才可以

Links booklink

Contact Us: admin [ a t ] ucptt.com