指针类型转换 C++

Pointer typecasting c++

#include <iostream>

#define print(x) std::cout << x;
#define println(x) std::cout << x << std::endl;

int main() {
    int ex[5];
    int* ptr = ex;
    for (int i = 0; i < 5; i++) {
        ex[i] = 2;
    }
    ex[2] = 3;
    *(int*)((char*)ptr + 8) = 4;
    println(ex[2]);
}

在第 13 行我正在使用 (char*),当我 运行 println(sizeof(char*)) 它说它是 4 个字节但我的老师说它是 1 个字节长所以我们需要添加 8字节来访问 ex[2] 中的值,这怎么可能我不明白! :/

这取决于您使用的架构。根据定义,char 是大小为 1 的类型,因此 sizeof(char) 的计算结果为 1,但它并不自动意味着它是 8 位。

要访问下一个值,您必须将 sizeof(int) 添加到指针以使您的代码独立于使用它的体系结构工作。

当你使用指针时,你告诉编译器指针指向的值在内存中采用该类型的space,内存中的下一个东西应该在那个数量的单位之后(字节)。因此,如果将 int 指针转换为 char 指针,则应将 sizeof(int) 添加到 char 指针,以获得与将 1 添加到 int 指针相同的效果。这是因为根据定义,char 自动为 1 个单位,如果您使用 char 以外的任何东西,这是行不通的,没有体系结构独立的类型大小规范。