我想了解编译器遇到此语句和((double*)0+1)
语句时的作用。
答案 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“一起工作”,并在一年的时间内绕过你的耳朵。