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

看板C_and_CPP作者時間8年前發表 (2016/12/08 01:45), 8年前編輯推噓1(1018)
留言19則, 4人參與, 最新討論串1/4 (看更多)
開發平台(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

12/08 09:58, , 1F
就取那個記憶體位置的BYTE值不是嗎..........
12/08 09:58, 1F

12/08 10:00, , 2F
Q1,你可以試著把int* char*,當作一個type來理解
12/08 10:00, 2F

12/08 10:44, , 3F
Q1: param 從型態未定的指標 void* 轉型成 int 指標
12/08 10:44, 3F

12/08 10:44, , 4F
再賦值給區域變數 state
12/08 10:44, 4F

12/08 10:48, , 5F
Q2:status從某個記憶體位置取值,那個位置在 p_evt_buf+1+
12/08 10:48, 5F

12/08 10:51, , 6F
+ 某固定 Offset, 你問差異一個等號右邊是值,另一是指標
12/08 10:51, 6F
※ 編輯: blueguan (36.225.32.24), 12/08/2016 13:45:42

12/08 18:35, , 7F
看這問題應該是用LINUX開發Android NDK
12/08 18:35, 7F

12/08 23:28, , 8F
感謝兩位~~~所以我可以這樣看.
12/08 23:28, 8F

12/08 23:30, , 9F
Q1). void *param沒有設type. int *state=(int *)param
12/08 23:30, 9F

12/08 23:31, , 10F
就是將param的byte設成 int,並且*state就是存這些byte
12/08 23:31, 10F

12/08 23:33, , 11F
Q2). 想請問p_evt_buf+1, 就是指p_buf[0]下一個位置為
12/08 23:33, 11F

12/08 23:33, , 12F
p_evt_buf[1] 嗎?
12/08 23:33, 12F
※ 編輯: blueguan (220.135.202.47), 12/08/2016 23:34:48

12/13 00:04, , 13F
看你理解的有點詭異。 指標只是
12/13 00:04, 13F

12/13 00:04, , 14F
存位址的變數
12/13 00:04, 14F

12/13 00:08, , 15F
(1) state param 裡面會存相同位址
12/13 00:08, 15F

12/13 00:09, , 16F
只是*state 會取出 一個integer
12/13 00:09, 16F

12/13 00:16, , 17F
(2) 是 p_evt_buf[1] 的位址 + 你offset 個byte 的位址
12/13 00:16, 17F

12/13 00:18, , 18F
然後取uint_8_t(一個byte)的值
12/13 00:18, 18F

12/13 01:16, , 19F
話說你第一點的理解 等號兩邊都反了 希望你只是筆誤
12/13 01:16, 19F
文章代碼(AID): #1OIBij7z (C_and_CPP)
文章代碼(AID): #1OIBij7z (C_and_CPP)