向指针添加偏移量
Adding an offset to a pointer
如果我有一个指向对象的指针,我想要得到一个指向对象的指针,在指针之后的16个字节,我如何将16个字节的偏移量添加到指针?
同样,32位系统中的内存地址看起来像这样0x00000000。如果我将地址更改为0x00000001到0x00000002会跳过多少字节?
指针计数字节,所以要指向下一个字节,您需要将指针的值更改1。但是,指针算术会对指针所指向的对象进行计数,对指针进行加1会使指针的值增加其指针类型的大小。如果您想指向字节,请使用char
指针,因为char
的定义大小为1,并且char
指针上的指针算术允许您指向字节:
T * p = get_pointer();
char * cp = reinterpret_cast<char*>(p);
cp += 16;
转换指向和来自char类型的指针不构成类型双关语,是标准明确允许的。但是,不能使用生成的指针访问实际不在该地址的任何对象。
如果我有一个指向一个对象的指针,我想要得到一个指向一个对象的指针,在指针后面16个字节,我怎么把16个字节的偏移量加到指针上?
通过char*
进行强制转换可以工作,但是这可能被认为是糟糕的做法,这取决于您的场景的细节:
T *ptr = initialize_ptr(); // Do whatever initialization you need to.
ptr = (T*)(((char*)ptr) + 16);
同样,32位系统中的内存地址看起来像这样0x00000000。如果我将地址更改为0x00000001到0x00000002会跳过多少字节?
2和1的差是1——正好一个字节将被跳过。
您可以这样做:
char *arr = (char*)((void*) ptrToSomeObject);
&arr[15]
下面发生了什么
- 任何ptr都可以转换为'void*'
- 'void *'可以转换为任何类型的ptr。
- arr[15] == (arr+15bytes)
相关文章:
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 通过指针偏移量访问结构变量值
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- librdkafka:rd_kafka_assignment 返回分配分区的偏移量 -1001
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- 向指针地址添加 20 个字节偏移量
- glMapBufferRange(..) 中的偏移量关系和 glDrawArraysInstanced(..) 中的第一
- 是否有与 C# Structs/StructLayout 等效的功能,C++中的字段偏移量?
- 我的 sumASCII 函数中的此偏移量是多少?
- boost::序列化中的派生类偏移量计算.有效吗?
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 胎面偏移量的时间复杂度?
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- 编译器在构造函数中计算的成员偏移量不正确
- 使用基地址和偏移量获取变量的地址
- 为什么我们在以下代码中添加偏移量以生成 3D 打印机的 GCODE
- Memcpy:添加int偏移量
- 如何为shared_ptr添加偏移量
- 添加基址+偏移量修改值
- 向指针添加偏移量