gpt4 book ai didi

C++ 向指针地址添加 4 个字节

转载 作者:行者123 更新时间:2023-11-28 04:34:56 26 4
gpt4 key购买 nike

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

假设我有以下代码:

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

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

array + 0x004

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

为什么?只是玩玩,我已经试过了,我得到了与我预期完全不同的结果,然后我研究了并且我已经看到当你将 +1 添加到指针时 c++ 已经很小心了(它在 4 个字节中求和这种情况)。

有什么想法吗?

最佳答案

对于指向类型 T 且值为 v 的指针 p,表达式 p+n 将 (在大多数系统上)导致指向地址 v+n*sizeof(T) 的指针。要获得指针的固定字节偏移量,您可以先将其转换为字符指针,如下所示:

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

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

请注意,访问未正确对齐的值可能会导致性能下降。

另一件需要注意的事情是,一般来说,不允许将指针转换为不同的类型(称为 strict aliasing 规则),但是将任何指针类型转换为 char* 并返回。

关于C++ 向指针地址添加 4 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51749221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com