double字段的calloc()总是计算为0.0吗?

Fra*_*ert 5 c floating-point double int calloc

  • 请问calloc()双场的总评估为0.0

此外:

  • 难道calloc()一个的float领域始终评估为0.0f
  • 请问calloc()一个intunsigned int领域始终评估为0

也就是说,assert()以下总是能在所有平台上取得成功吗?

double* d = calloc(1, sizeof(double));
assert(*d == 0.0);
free(d);
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

calloc分配的内存的所有字节设置为零.

实际上,这也是有效的IEEE754(这是计算机上浮点值的最常见格式)表示0.0.

IIRC没有C规范的任何部分要求实现使用IEEE754,所以要挑剔它不可移植.实际上,它是(并且如果你打算在非IEEE754系统上工作,那么你应该已经积累了足够的经验,已经知道这个以及如何解决这些问题).

另请注意,这也适用于指针.在您可能接触到的所有系统上,空指针应该等于0.但是可能有系统没有,但如果你在这样的系统上工作,你应该已经知道它(如果你使用NULL那么它应该不是问题).


Ant*_*ala 5

C11文档有明确的通知 calloc

脚注

296)注意,这不必与浮点零或空指针常量的表示相同.

实际上,所有零位都是主要平台上0.0和空指针的(或)表示,对于IEEE 754是真的.