我想了解编译器遇到这个语句和((double*)0+1)
语句时是怎么做的。
问问题
139 次
2 回答
3
由于double *
是指针类型,它将字面值传播0
给NULL
指针,然后根据指针算术规则,将其值加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 回答