鉴于以下C定义:
#define SYNC_BYTE_1 0x5A
#define SYNC_BYTE_2 0xA5
Run Code Online (Sandbox Code Playgroud)
和指针声明:
UINT8 *pCommandData;
pCommandData = GetCommandBufferPointer( LINGO_GENERAL, stringLength + 3 );
Run Code Online (Sandbox Code Playgroud)
以下两行代码到底是做什么的?
*pCommandData++ = SYNC_BYTE_1;
*pCommandData++ = SYNC_BYTE_2;
Run Code Online (Sandbox Code Playgroud)
我特别不了解*
和++
在这种情况下的使用.如果指针的地址递增,不应该*
用&
?替换?
pCommandData
是指向某段内存的指针.第一行
*pCommandData++ = SYNC_BYTE_1;
Run Code Online (Sandbox Code Playgroud)
将该地址的值设置为0x5A
,然后将指针递增pCommandData
到下一个地址.下一行
*pCommandData++ = SYNC_BYTE_2;
Run Code Online (Sandbox Code Playgroud)
工作方式类似:它设置pCommandData
指向,指向0xA5
,然后将指针递增到下一个地址的值.
也许一张照片会很有用.在任一行执行之前,位于任何pCommandData
位置附近的内存可能如下所示:
| |
+--------+
pCommandData -----> | |
+--------+
| |
+--------+
| |
+--------+
| |
Run Code Online (Sandbox Code Playgroud)
之后*pCommandData++ = SYNC_BYTE_1;
:
| |
+--------+
pCommandData --+ | 0x5A |
| +--------+
+--> | |
+--------+
| |
+--------+
| |
Run Code Online (Sandbox Code Playgroud)
之后*pCommandData++ = SYNC_BYTE_2;
:
| |
+--------+
pCommandData --+ | 0x5A |
| +--------+
| | 0xA5 |
| +--------+
+--> | |
+--------+
| |
Run Code Online (Sandbox Code Playgroud)
这个:
UINT8 *pCommandData;
*pCommandData++ = SYNC_BYTE_1;
*pCommandData++ = SYNC_BYTE_2;
Run Code Online (Sandbox Code Playgroud)
相当于:
UINT8 *pCommandData;
*pCommandData = SYNC_BYTE_1;
pCommandData++;
*pCommandData = SYNC_BYTE_2;
pCommandData++;
Run Code Online (Sandbox Code Playgroud)
要么:
UINT8 *pCommandData;
pCommandData[0] = SYNC_BYTE_1;
pCommandData[1] = SYNC_BYTE_2;
pCommandData += 2;
Run Code Online (Sandbox Code Playgroud)