gpt4 book ai didi

c - sizeof(double) 一次是8,另一次是0?

转载 作者:行者123 更新时间:2023-11-30 19:54:49 25 4
gpt4 key购买 nike

我写了一个链表库,用于自学编写 C 语言并做一些与我的信息技术学习相关的事情。我发现,由于 4.9 的 sizeof(double) 被解析为 0,出现了严重错误:

double ary[] = { 1.0, 2.0, 3.5, 4.9, 5.5 };
LinkedList *list = linkedlist(&ary[0], sizeof(ary[0]));
for( i = 1; i<len(ary); i++ )
ll_push(list, &ary[i], sizeof(double) );

(this test 中的第 267-270 行,对于 this library )

1.0、2.0 和 3.5 一切正常,但 4.9 就失败了。以前,我在代码中使用了 sizeof(ary[i]),但现在 sizeof(double) 的结果相同。

我对此感到非常沮丧。谁能解释一下为什么会发生这种情况?

最佳答案

除了一些不相关的情况外,sizeof是一个编译时实体,它总是在编译时被“解析”并替换为实际的常量值。这立即意味着你所描述的情况是完全不可能的。 sizeof(ary[i]) 无法根据 i 更改其值。您平台上的 sizeof(double)sizeof(ary[i]) 始终替换为立即数 8 并且不依赖于任何运行-时间因素。

程序中的任何错误都与 sizeof 的行为完全无关。您关于 sizeof 以某种方式评估 ary[3]0 的结论是不正确的。事实上,带有 sizeof(double) 的版本以完全相同的方式失败,这应该给您一个明确的提示。

关于c - sizeof(double) 一次是8,另一次是0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961377/

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