0

我想了解编译器遇到这个语句和((double*)0+1)语句时是怎么做的。

4

2 回答 2

3

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

于 2013-04-04T08:54:01.027 回答
0

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

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

上面的所有三个任务都做同样的事情。

除非指针值转换为 0,否则您必须格外小心不要搞砸。大多数指针转换都要求未定义的行为,它们可能会在您当前机器上与今天的编译器一起“工作”,并在一年后在您耳边响起。

于 2013-04-04T17:57:00.920 回答