[问题] 困难的指标问题?

楼主: blueguan   2016-12-08 09:45:15
开发平台(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 跟刚原本的差异是在哪?
感谢各位大大.谢谢
作者: stupid0319 (征女友)   2016-12-08 09:58:00
就取那个内存位置的BYTE值不是吗..........Q1,你可以试着把int* char*,当作一个type来理解
作者: colako (凯风快晴)   2016-12-08 10:44:00
Q1: param 从型态未定的指标 void* 转型成 int 指标再赋值给区域变量 stateQ2:status从某个内存位置取值,那个位置在 p_evt_buf+1++ 某固定 Offset, 你问差异一个等号右边是值,另一是指标
作者: stupid0319 (征女友)   2016-12-08 18:35:00
看这问题应该是用LINUX开发Android NDK
楼主: blueguan   2016-12-08 23:28:00
感谢两位~~~所以我可以这样看.Q1). void *param没有设type. int *state=(int *)param就是将param的byte设成 int,并且*state就是存这些byteQ2). 想请问p_evt_buf+1, 就是指p_buf[0]下一个位置为p_evt_buf[1] 吗?
作者: mibu945 (米布)   2016-12-13 00:04:00
看你理解的有点诡异。 指标只是存位址的变量(1) state param 里面会存相同位址只是*state 会取出 一个integer(2) 是 p_evt_buf[1] 的位址 + 你offset 个byte 的位址然后取uint_8_t(一个byte)的值话说你第一点的理解 等号两边都反了 希望你只是笔误

Links booklink

Contact Us: admin [ a t ] ucptt.com