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

看板C_and_CPP作者 (life is struggle)時間8年前 (2016/12/23 17:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
凡記憶體皆有實體位置跟虛擬位置 先清楚記憶體位置存的類型 位置裡面存的 是 "位置" 還是 "值" 前者就是叫做指標 當然如果存的是 "位置裡的位置" 就是double pointer. 對我來說就是把他看成一種變數型態 有了指標可以將各處記憶體裡面的值拿出來玩 下面的code, 其實很容易看 在我腦海 就是這支func 宣告一塊塊的local區塊 (BT_HDR type) 1. 裡面存了傳進來的buffer 的位置 2. 當然buffer早就存在記憶體某個天涯海角之處 管他在哪... 3. 去遠端操控buffer 這塊記憶體 裡面存len /offset 該存甚麼 隨便.. 4. 宣告 pp 去儲存 buffer +1 的位置 , aka buffer[1] , 當然buffer +1 類型也是 BT_HDR 但兩邊同時轉成UINT8 * 5. pp 再度轉成void ** 只是為了存 一個型態為"void *" call back function的位置.. ※ 引述《blueguan ()》之銘言: : 各位好~基本上這是Android原本的Code.. : 目前就是讀code在研究啦!!!因為很多地方沒有看懂... : 有點類似讀一篇文章...但是讀下去..囧囧的 : 原始的Code如下: : void btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, : UINT8 *p_data, void *p_cmd_cplt_cback) : { : BT_HDR *p = (BT_HDR *)buffer; : UINT8 *pp = (UINT8 *)(p + 1); : p->len = HCIC_PREAMBLE_SIZE + len; : p->offset = sizeof(void *); : *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in : buffer */ : pp += sizeof(void *); /* Skip over callback pointer */ : UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); : UINT8_TO_STREAM (pp, len); : ARRAY_TO_STREAM (pp, p_data, len); : btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); : } : 網址如下唷: : https://android.googlesource.com/platform/system/bt/+/android-6.0.0_r1/stack/hcic/hcicmds.c : 感謝大家 : ※ 引述《blueguan ()》之銘言: : : 在請問大家另外一個問題 如下: : : UINT8 *pp = (UINT8 *)(p + 1); : : *((void **)pp) = p_cmd_cplt_cback; : : pp += sizeof(void *); : : 請問這三行是怎麼處理? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.77.248 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1482515206.A.F86.html
文章代碼(AID): #1ONMC6-6 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ONMC6-6 (C_and_CPP)