作者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/m.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