写成NULL就可以写成0x0010就不行

2019-07-19 16:29发布

问题:
1、int  *p=NULL;
     *p=100;
NULL是一个宏定义,定义如下:#define  NULL  0
我这样理解:第一句句的意思是定义指针变量p,p指向0x0000这个地址,第二句的意思为给0x0000这个地址赋值为100
2、假如我现在想让p指向0x0010这个地址并赋值为100,为什么我这样写会出错:
int *p=0x0010;   *p=100;

但改成如下int *p=(int *)(0x0010);  *p=100;  这样编译后测试正确。

从道理上讲,int *p=0x0010;  应该也是可以的把?为什么写成NULL就可以,写成0x0010就不行?!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
lizye
1楼-- · 2019-07-20 11:44

int *p=0x0010;

如上这样的定义已经确定了指针变量的类型了把?

至于指针本身的数据类型是由编译器自己确定的吧
wuhany
2楼-- · 2019-07-20 12:38
“0x0010”的类型和“p”的类型不符。
lizye
3楼-- · 2019-07-20 16:26

啊,那为什么直接写NULL可以呢?

NULL也是一个数值啊。
jiahy
4楼-- · 2019-07-20 16:40

原因就一个,大家都说了,0和其他的数不一样,那不一样 你就别放一起比。
    那为啥不一样呢?这是编译器决定的,不是个人决定的。你用这个编译器就按规矩来。
spark周
5楼-- · 2019-07-20 18:18
 精彩回答 2  元偷偷看……
liliang9554
6楼-- · 2019-07-20 22:12
编译器定的规则,你只能去遵守。

例如VC里变量可以随处定义(函数长的时候可读性强),但Keil,IAR里都不行……

一周热门 更多>