指针算术和强制转换
Pointer Arithmetics and casting
不知何故,这些指针算法对我来说非常混乱。举个例子:
uint16_t *a = (uint16_t *)0x200;
a += 4 * sizeof(uint32_t);
在计算 a 的新值时,您的思维过程是什么?
这就是我试图弄清楚的方式:
- 指针 (a) 指向一个地址,该地址的值为 0x200 uint16_t类型。
- 第二个操作将指针 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
.
相关文章:
- 转换指针引用的字符串
- 无法向上转换指针到指针参数
- 混合转换指针和引用
- 堆栈对象的强制转换指针
- 基类到派生模板类的强制转换指针,而不知道类型
- 删除类型转换指针的最佳方法
- 管理到本机值类转换:强制转换指针是否安全?
- 转换指针类型
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 当我们递增下面的类型转换指针时会发生什么?
- 类型强制转换指针构造函数调用
- 如何转换(指针向量)-->(指向指针数组的指针)
- 如何从类功能转换指针
- 在C++对象中:我应该使用父类强制转换指针,还是应该使用实际类本身进行强制转换
- Delphi中的类型转换指针添加
- C++分段错误(核心转储)错误 - 强制转换指针/将函数值返回到线程
- 以C++和运算符优先级键入指向数组成员的强制转换指针
- C++动态强制转换指针的内存清理
- 转换指针和引用的好处
- 在c++中转换指针