写成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条回答
wyjie
1楼-- · 2019-07-19 20:14
 精彩回答 2  元偷偷看……
jlyuan
2楼-- · 2019-07-20 00:47

因为考虑到不同的存储空间,指针并不是单纯的一个地址偏移,还要包含存储空间信息。

这点在嵌入式系统中更是普遍,比如:
Keil中的执政就是3个字节的。
yszong
3楼-- · 2019-07-20 01:16
这样的写法依然错误!
NULL之所以行,因为定义了#define NULL    ((void *)0),我是在visual Studio 下编译的
lizye
4楼-- · 2019-07-20 02:14

#define NULL 0
OR
#define NULL ((void *)0)

好像是按照第一个方式定义的吧?如果按照第二句定义似乎还好理解点。

好像指针不应该直接给値!
lizye
5楼-- · 2019-07-20 05:05
怎么包含存储空间信息?
wuhany
6楼-- · 2019-07-20 08:17
 精彩回答 2  元偷偷看……

一周热门 更多>