我测试了这个,k
是16,但为什么?
int main(int argc, char **argv) {
int k = (int)((int *)0 + 4);
printf("%d", k);
return 0;
}
答案 0 :(得分:3)
重要提示:指向不指向数组的指针的指针算法是未定义的行为。你可以得到16,但是如果实现选择为结果生成陷阱表示,你也可能会崩溃。
这是指针算术:当您向指向x
的指针添加数字T
时,与指针对应的数值增加x * sizeof(T)
。
在您的情况下,指针的数值为零,x
为4,sizeof(int)
也为4. 4*4
产生16。
答案 1 :(得分:1)
C中的指针运算使用类型的大小作为单位;将int加1将使其前进4(假设int为32位)。
编辑:对无效指针(包括NULL)的指针算法是未定义的行为。