#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指针,则应将sizeof(int)添加到char指针,以达到与将1添加到int指针相同的效果。这是因为从定义上看,char自动为1个单位,如果您使用char以外的任何其他字符,这将不起作用,因为没有体系结构无关的类型大小说明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句