首页 > 解决方案 > C ++将4个字节添加到指针地址

问题描述

我有一个关于指针和内存地址的问题:

假设我有以下代码:

int * array = (int *) malloc(sizeof(int) * 4);

现在在存储内存地址的数组中,我知道 C++ 在向该指针添加 +1 时已经小心,它将添加 4 个字节,但是如果我想手动添加 4 个字节怎么办?

array + 0x004

如果我正确,这将导致添加 4*4 (16) 个字节,但我的想法是手动添加这 4 个字节。

为什么?只是在玩,我试过这个,我得到了与我预期完全不同的结果,然后我研究了,我发现当你向指针添加 +1 时,c++ 已经很小心了(它总计 4 个字节这个案例)。

任何想法?

标签: c++pointers

解决方案


对于指向具有 valuep的类型的指针,表达式将(无论如何在大多数系统上)导致指向 address 的指针。要获得指针的固定字节偏移量,您可以首先将其转换为字符指针,如下所示:Tvp+nv+n*sizeof(T)

reinterpret_cast<T*>(reinterpret_cast<char*>(p) + n)

在 c++ 中,sizeof(char)定义为等于 1。

请注意,访问不正确对齐的值可能会产生很大的性能损失。

另一件需要注意的事情是,一般来说,不允许将指针转换为不同类型(称为严格别名char*规则),但是显式地将任何指针类型转换为和返回异常。


推荐阅读