打印

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

[复制链接]
719|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2019-3-4 19:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:
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就不行?!

相关下载

相关帖子

沙发
wyjie| | 2019-3-4 19:25 | 只看该作者
你可以这样写:
int *p;
   p=10;
   *p=100;
这是C语言的语法。

使用特权

评论回复
板凳
jlyuan| | 2019-3-4 19:28 | 只看该作者

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

这点在嵌入式系统中更是普遍,比如:
Keil中的执政就是3个字节的。

使用特权

评论回复
地板
yszong| | 2019-3-4 19:31 | 只看该作者

这样的写法依然错误!
NULL之所以行,因为定义了#define NULL    ((void *)0),我是在visual Studio 下编译的

使用特权

评论回复
5
lizye|  楼主 | 2019-3-4 19:35 | 只看该作者

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

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

好像指针不应该直接给値!

使用特权

评论回复
6
lizye|  楼主 | 2019-3-4 19:38 | 只看该作者

怎么包含存储空间信息?

使用特权

评论回复
7
wuhany| | 2019-3-4 19:40 | 只看该作者

指针是有“类型”的!必须符合强制类型匹配。

使用特权

评论回复
8
lizye|  楼主 | 2019-3-4 19:45 | 只看该作者

int *p=0x0010;

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

至于指针本身的数据类型是由编译器自己确定的吧

使用特权

评论回复
9
wuhany| | 2019-3-4 19:47 | 只看该作者

“0x0010”的类型和“p”的类型不符。

使用特权

评论回复
10
lizye|  楼主 | 2019-3-4 19:51 | 只看该作者

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

NULL也是一个数值啊。

使用特权

评论回复
11
jiahy| | 2019-3-4 19:55 | 只看该作者

原因就一个,大家都说了,0和其他的数不一样,那不一样 你就别放一起比。
    那为啥不一样呢?这是编译器决定的,不是个人决定的。你用这个编译器就按规矩来。

使用特权

评论回复
12
houcs| | 2019-3-4 19:55 | 只看该作者

有截图吗

使用特权

评论回复
13
spark周| | 2019-3-4 19:58 | 只看该作者
LZ说的是对的。0x0010就是个地址。只是匿名指针0x0010 一定要加上存储类型data/xdata等等。(不加有警告,也能运行。)

void main()   
{
int data *p=0x0010;       // 和p=(int data *)0x0010;  一样
*p=100;
while(1);
}

使用特权

评论回复
14
liliang9554| | 2019-3-4 20:01 | 只看该作者

编译器定的规则,你只能去遵守。

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

使用特权

评论回复
15
午夜粪车| | 2019-3-4 20:05 | 只看该作者

强制类型匹配的问题吧

使用特权

评论回复
16
heweibig| | 2019-3-4 20:08 | 只看该作者
“0x0010”是什么类型

使用特权

评论回复
17
heweibig| | 2019-3-4 20:11 | 只看该作者
指针并不是单纯的一个地址偏移,还要包含存储空间信息

使用特权

评论回复
18
lizye|  楼主 | 2019-3-4 20:15 | 只看该作者
嗯,预料中的结果,先结贴吧,多谢大家啦

使用特权

评论回复
19
lolplmlk| | 2019-3-5 16:04 | 只看该作者
0x0010是数值而不是地址

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝