gpt4 book ai didi

c - int 指针转换为 void 指针,然后转换为 double 指针

转载 作者:行者123 更新时间:2023-12-04 11:48:56 24 4
gpt4 key购买 nike

#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));

}

这个程序的输出是8。
这是怎么发生的??
我的意思是 double_ptr 指向 4 字节内存,但输出仍然是 8。
*其他 4 个字节来自哪里???该程序应该崩溃,因为其他 4 个字节未分配给它。 *
请解释一下??

最佳答案

C 是静态类型的,表达式sizeof *double_ptr 仅根据这些静态类型规则计算,即double_ptr 指向一个double大小为 8

这个程序有未定义的行为,因为你正在写入一个你不“拥有”的内存范围。所有的赌注都没有了,它可能会崩溃,也可能不会。当进行这种令人讨厌的转换时,您要为此负责,而不是编译器。

编辑,挑剔:

  • 符合规范的编译器不应容忍没有返回类型的函数。提高警告级别。
  • 在此处发布代码时,请适当缩进
  • sizeof 运算符的结果不是int,而是size_t 无符号类型。使用 "%d" 打印也有未定义的行为。使用 "%zu"

关于c - int 指针转换为 void 指针,然后转换为 double 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21329841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com