作者blueguan ()
看板C_and_CPP
标题[问题] 指标传递问题
时间Fri Dec 2 19:12:01 2016
开发平台(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://webptt.com/cn.aspx?n=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
1F:推 LPH66: 你想要让 testF 填入 p_entry 指向的东西, 那在传进 testF 12/02 19:13
2F:→ LPH66: 时就必须要给一个实际上指向那个 struct 的指标 12/02 19:13
3F:→ LPH66: 你这样写变成传入一个指向指标的指标, 所以就会有问题 12/02 19:14
4F:→ LPH66: 正确的做法是 test_entry_t entry; testF(&entry); 12/02 19:14
5F:→ LPH66: 或者如果你的 struct 是 malloc 来的话: 12/02 19:14
6F:→ LPH66: test_entry_t *p_entry = (test_entry_t)malloc(...); 12/02 19:15
7F:→ LPH66: testF(p_entry); 这样子 12/02 19:15
8F:→ LPH66: 啊, 上上行少一个 *, 总之意思应该到了 12/02 19:16
9F:→ blueguan: test_entry_t **p_entry = (test_entry_t)malloc(...); 12/02 19:17
10F:→ blueguan: 这样吗? 12/02 19:17
11F:推 LPH66: 是转型少了 *... 12/02 19:18
12F:→ blueguan: est_entry_t *p_entry = (test_entry_t *)malloc(...); 12/02 19:25
13F:→ blueguan: 这样吗? 12/02 19:26
14F:→ blueguan: 我改完好像~还是没有把值塞进去 12/02 19:38
15F:→ pttworld: 预期输出的正确结果: 12/02 19:40
※ 编辑: blueguan (1.164.192.107), 12/02/2016 19:46:48
16F:→ blueguan: 我加入预期输出结果了... 12/02 19:47
18F:→ blueguan: 感谢各位大大~~已经可以了!!!! 各位太威了.. 12/02 20:07
19F:→ blueguan: 所以我必须要宣告给空间才可以 12/02 20:07