指针类型转换C ++

AM Z:
#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]中的值,这怎么可能可能我不明白!:/

tvili999:

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

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

当使用指针时,您告诉编译器指针所指向的值占用内存中该类型的空间,而内存中的下一个内容应位于该单位数量(字节)之后。因此,如果将int指针转换为char指针,则应将sizeof(int)添加到char指针,以达到与将1添加到int指针相同的效果。这是因为从定义上看,char自动为1个单位,如果您使用char以外的任何其他字符,这将不起作用,因为没有体系结构无关的类型大小说明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章