作者blueguan ()
看板C_and_CPP
标题[问题] 困难的指标问题?
时间Thu Dec 8 09:45:15 2016
开发平台(Platform): (Ex: Win10, Linux, ...)
Linux/Android
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
问题(Question):
请问各位~我几段Code不清楚~想请问大家
Q1).
static int op(vendor_code_t opcode, void *param){
...
int *state = (int *) param; <==
...
}
这边指的是宣告一个指标 state. 并且把*state的位置给param并且转化为int type.
请问我的理解有错吗?另外假如要转为char type则就改成以下,是否正确
char *state = (char *)param;
Q2).
status = *((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_RET_BYTE);
这段 Code 我有点看不懂. 这到底是把值塞给status吗?
所谓的 *((uint8_t *)(p_evt_buf + 1) 是指那一块塞过去呢?
p = (uint8_t *)(p_buf + 1);
哪这段 Code 跟刚原本的差异是在哪?
感谢各位大大.谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.225.32.24
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1481161517.A.1FD.html
1F:→ stupid0319: 就取那个记忆体位置的BYTE值不是吗.......... 12/08 09:58
2F:→ stupid0319: Q1,你可以试着把int* char*,当作一个type来理解 12/08 10:00
3F:→ colako: Q1: param 从型态未定的指标 void* 转型成 int 指标 12/08 10:44
4F:→ colako: 再赋值给区域变数 state 12/08 10:44
5F:→ colako: Q2:status从某个记忆体位置取值,那个位置在 p_evt_buf+1+ 12/08 10:48
6F:→ colako: + 某固定 Offset, 你问差异一个等号右边是值,另一是指标 12/08 10:51
※ 编辑: blueguan (36.225.32.24), 12/08/2016 13:45:42
7F:→ stupid0319: 看这问题应该是用LINUX开发Android NDK 12/08 18:35
8F:→ blueguan: 感谢两位~~~所以我可以这样看. 12/08 23:28
9F:→ blueguan: Q1). void *param没有设type. int *state=(int *)param 12/08 23:30
10F:→ blueguan: 就是将param的byte设成 int,并且*state就是存这些byte 12/08 23:31
11F:→ blueguan: Q2). 想请问p_evt_buf+1, 就是指p_buf[0]下一个位置为 12/08 23:33
12F:→ blueguan: p_evt_buf[1] 吗? 12/08 23:33
※ 编辑: blueguan (220.135.202.47), 12/08/2016 23:34:48
13F:→ mibu945: 看你理解的有点诡异。 指标只是 12/13 00:04
14F:→ mibu945: 存位址的变数 12/13 00:04
15F:推 mibu945: (1) state param 里面会存相同位址 12/13 00:08
16F:→ mibu945: 只是*state 会取出 一个integer 12/13 00:09
17F:→ mibu945: (2) 是 p_evt_buf[1] 的位址 + 你offset 个byte 的位址 12/13 00:16
18F:→ mibu945: 然後取uint_8_t(一个byte)的值 12/13 00:18
19F:→ mibu945: 话说你第一点的理解 等号两边都反了 希望你只是笔误 12/13 01:16