#include <stdio.h>
#include <string.h>
main()
{
int an_int;
void *void_pointer = &an_int;
double *double_ptr = void_pointer;
*double_ptr = 10;
printf("%d", sizeof(*double_ptr));
}
Run Code Online (Sandbox Code Playgroud)
这个程序的输出是8.这是
怎么回事?
我的意思是double_ptr指向4字节内存,但仍然输出为8.
*其他4个字节来自哪里?该程序应该崩溃,因为没有分配其他4个字节.*
请解释一下?
C是静态类型的,表达式sizeof *double_ptr仅根据这些静态类型规则计算,即double_ptr指向double具有大小的a 8.
此程序具有未定义的行为,因为您正在写入您不"拥有"的内存范围.所有赌注都已关闭,可能会崩溃或不崩溃.在进行这种讨厌的转换时,你应该对此负责,而不是编译器.
编辑,为挑剔:
sizeof算不算int而是size_t一个无符号的类型.打印时"%d"也有未定义的行为.使用"%zu".