【发布时间】:2020-08-02 14:56:46
【问题描述】:
#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],这怎么可能我不明白! :/
【问题讨论】:
-
你的问题在哪里?
-
sizeof(char)为 1,sizeof(char*)取决于平台(在大多数系统上为 4 或 8) -
println(sizeof(char*))是基于架构的 4 或 8 个字节。可能你的教授已经提到它char -
只有在
sizeof(int)是4时,第13 行才会可靠地修改ex[2]并赋予它4的值。这是不能保证的。尽管sizeof(char)是1(根据定义)其他类型的大小(例如sizeof(char *)和sizeof(int)都是实现定义的)。