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

mus*_*tze -2 c debugging double linked-list sizeof

我写了一个链表列表,用于教育自己写C和做一些与我的信息技术学习有关的东西.我发现,由于sizeof(double)被解析为0为4.9,因此出现了一些可怕的错误:

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) );
Run Code Online (Sandbox Code Playgroud)

(线267-270在该试验中这个库)

对于1.0,2.0和3.5来说一切都很好,但对于4.9来说它很糟糕.以前,我在代码中有sizeof(ary [i]),但现在sizeof(double)的结果相同.

我真的很不高兴.任何人都可以解释,为什么会这样?

AnT*_*AnT 7

除了一些不相关的情况,它sizeof是一个编译时实体,它总是被"解析"并在编译时被实际的常量值替换.这立即意味着你所描述的是完全不可能的.sizeof(ary[i])不能改变它的价值取决于i.无论sizeof(double)sizeof(ary[i])你的平台上总是立即更换8,不依赖于任何运行时间的因素.

你的程序中的任何错误都与行为完全无关sizeof.您对结论sizeof在某种程度上对评估0ary[3]不正确.sizeof(double)以完全相同的方式失败的版本应该是一个明确暗示你的事实.

  • 你试过*打印*sizeof(double)`的值吗?你会看到它永远不会改变.你的问题在别处. (4认同)