[問題] 困難的指標問題?

作者: 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