指针在C中递增

use*_*997 4 c pointers

请考虑以下代码:

unsigned short i;
unsigned short a;
unsigned char *pInput = (unsigned char *)&i;

pInput[0] = 0xDE;
pInput[1] = 0x01;

a = ((unsigned short)(*pInput++)) << 8 | ((unsigned short)(*pInput++));
Run Code Online (Sandbox Code Playgroud)

为什么a的值是0xDEDE,而不是0xDE01?

hac*_*cks 5

代码调用未定义的行为.原因是pInput在两个序列点之间不止一次修改.您可能得到任何预期或意外结果.什么都不能说.

C99指出:

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.此外,只能访问先前值以确定要存储的值.

阅读c-faq 3.8以获取更详细的说明.