作者archiee (life is struggle)
看板C_and_CPP
标题Re: [问题] 困难的指标问题?
时间Sat Dec 24 01:46:44 2016
凡记忆体皆有实体位置跟虚拟位置
先清楚记忆体位置存的类型
位置里面存的 是 "位置" 还是 "值"
前者就是叫做指标 当然如果存的是 "位置里的位置" 就是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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1482515206.A.F86.html