指针如何知道它指向的内存大小?
它没有.
因此,如果一个指针指向一个128字节大小的内存段并且指针被转换为另一种类型,那么内存段的大小会发生什么变化呢?
记忆仍在那里,但是既然你丢弃了关于居住在那里的物体的唯一信息,那么,你知道.而已.你不知道.
这就是为什么人们sizeof
在通过a char*
对对象进行别名来获取底层字节时使用的原因:
std::ofstream os("some-binary-file");
const double d = 0.1234;
os.write((char*)&d, sizeof(double));
// ^^^^^^^^^^^^^^
//
// Otherwise os.write has no way of knowing how much to write
Run Code Online (Sandbox Code Playgroud)
当然,如果你要浏览一下double*
,使用该指针的每一段代码都会假定它指向一个或多个内存的"块",精确地为sizeof(double)
字节宽.如果没有,那那就是你的错.
tl; dr:告诉程序它有多少指针字节是你的责任.