((double *)0)在C内部做什么

时间:2013-04-04 08:52:02

标签: c compiler-construction

我想了解编译器遇到此语句和((double*)0+1)语句时的作用。

2 个答案:

答案 0 :(得分:3)

由于double *是指针类型,它将文字值0传播到NULL指针,然后根据指针算法的规则,它将值加1(因此在数字上,结果将是NULL + sizeof(double))。

答案 1 :(得分:0)

什么都没有......它将{0(根据定义,NULL指针)转换为指向double的指针。大概是这样说的:

double *ptr;
....
ptr = ((double *) 0);
....
ptr = NULL;  /* Idiomatic */
ptr = 0;     /* Also allowed, for lazy fingers */

上述所有三种情况完全相同。

除非指针值为0,否则你必须格外小心,不要搞砸。大多数指针演员都在呼唤未定义的行为,他们可能会在你当前的机器上与今天的compliler“一起工作”,并在一年的时间内绕过你的耳朵。