看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1481161517.A.1FD.html
stupid0319: 就取那個記憶體位置的BYTE值不是嗎.......... 12/08 09:58
stupid0319: Q1,你可以試著把int* char*,當作一個type來理解 12/08 10:00
colako: Q1: param 從型態未定的指標 void* 轉型成 int 指標 12/08 10:44
colako: 再賦值給區域變數 state 12/08 10:44
colako: Q2:status從某個記憶體位置取值,那個位置在 p_evt_buf+1+ 12/08 10:48
colako: + 某固定 Offset, 你問差異一個等號右邊是值,另一是指標 12/08 10:51
※ 編輯: blueguan (36.225.32.24), 12/08/2016 13:45:42
stupid0319: 看這問題應該是用LINUX開發Android NDK 12/08 18:35
blueguan: 感謝兩位~~~所以我可以這樣看. 12/08 23:28
blueguan: Q1). void *param沒有設type. int *state=(int *)param 12/08 23:30
blueguan: 就是將param的byte設成 int,並且*state就是存這些byte 12/08 23:31
blueguan: Q2). 想請問p_evt_buf+1, 就是指p_buf[0]下一個位置為 12/08 23:33
blueguan: p_evt_buf[1] 嗎? 12/08 23:33
※ 編輯: blueguan (220.135.202.47), 12/08/2016 23:34:48
mibu945: 看你理解的有點詭異。 指標只是 12/13 00:04
mibu945: 存位址的變數 12/13 00:04
mibu945: (1) state param 裡面會存相同位址 12/13 00:08
mibu945: 只是*state 會取出 一個integer 12/13 00:09
mibu945: (2) 是 p_evt_buf[1] 的位址 + 你offset 個byte 的位址 12/13 00:16
mibu945: 然後取uint_8_t(一個byte)的值 12/13 00:18
mibu945: 話說你第一點的理解 等號兩邊都反了 希望你只是筆誤 12/13 01:16