指针算术和铸造

时间:2016-02-25 15:02:44

标签: c++

不知何故,这些指针算术对我来说非常混乱。 一个例子:

uint16_t *a = (uint16_t *)0x200;
a += 4 * sizeof(uint32_t);

在计算a的新值时,您的思维过程是什么?

这就是我试图解决的问题:

  1. 指针(a)指向一个地址,其值为uint16_t类型的0x200。
  2. 第二个操作将指针a移动到+ 4 * 8个字节,进一步向上移动32个字节(十六进制为20),这显然是0x220。为什么这不是& a + 32?我认为这是我迷惑的地方......为什么指针指向0x200而不是& a?

1 个答案:

答案 0 :(得分:2)

指针运算以指向的类型为单位。

因此,如果您刚刚++a;a的新值将是0x202不是 0x201

因此,当您添加4 * sizeof (uint32_t)时,这与添加2 * 4 * 4相同,即32,即十六进制0x20。因此新值为0x220