指针除了0以外,任何时候都不能赋未经转换的常量 是什么意思?

2025-03-11 09:35:04
推荐回答(1个)
回答1:

很理解啊,定义一个指针 int* p; 然后给它赋值,p=0;这样可以,即可以赋0值。
但是这样赋值:p=1;就不可以,编译会报警告的。
需要转换一下:p=(int*)1;这样就可以了。

这个问题的本质是:指针也是一种变量类型,它实际就是内存地址,必须拿着地址来给它赋值,所以一般的常量需要转换一下,转换成指针变量(也就是“地址”),而0之所以不需要转换,这就是因为对指针来说0实际就是NULL——空指针,所以不需转换,至于为什么,从NULL的角度来看更好理解,空指针NULL实际上就是0宏定义出来的,这个宏定义是编译器完成的,不用自己考虑,可以直接用NULL。