#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)添加到指针中,以使您的代码独立于使用它的体系结构来工作。
当您使用指针时,您告诉编译器指针指向的值占用内存中该类型的空间,并且内存中的下一个内容应该在该单位(字节)量之后。 因此,如果将int指针强制转换为char指针,则应在char指针中添加sizeof(int),以获得与在int指针中添加1相同的效果。 这是因为char根据定义自动为1个单元,如果您将使用char以外的任何东西,这将不起作用,没有独立于体系结构的类型大小规范。