指针算术和强制转换

Pointer Arithmetics and casting

本文关键字:转换 指针      更新时间:2023-10-16

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

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

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

这就是我试图弄清楚的方式:

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

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

所以如果你只是做了++a;a的新值将是0x202而不是0x201

所以,当你添加4 * sizeof (uint32_t)时,这与添加2 * 4 * 4相同,即32,这是十六进制0x20。所以新值是 0x220 .