int *p=(int *)100; 数字转换成int类型的指针?

[复制链接]
查看11 | 回复4 | 2011-11-4 12:52:15 | 显示全部楼层 |阅读模式
输出的时候为什么是printf(\"%d\",p)(这个输出结果是100,这100是值,还是地址的值);而不是printf(\"%d\",*p);(输出这个报错)这是把100转换成指针还是地址?都点搞糊涂了。请高手详细解释一下,谢谢
回复

使用道具 举报

千问 | 2011-11-4 12:52:15 | 显示全部楼层
int*p=(int*)100;这样说吧,这条语句没有任何错误,只是平时谁也不这么用而已。这就是把100这个十进制整型数强制变成了地址值00000000000000000000000001100100赋给了指向整型数的指针p。printf(\"%d\",p)和printf(\"%d\",*p)语法上都对。前者是输出指针变量p自身的值(习惯上都称它指向的地址),它就是上面提到的十进制数100;你要用printf(\"%X\",p)输出的话就是上面那串二进制数的十六进制00000064。后者*p是取p指向的地址中的内容,也就是地址100中的内容;现在的问题是你没有给100这个地址中放内容,它当然要报错啊!如果你在int*p=(int*)100;后加一句*p=123(随便一个数),它就不报错了,而且会打出123这个数来……
回复

使用道具 举报

千问 | 2011-11-4 12:52:15 | 显示全部楼层
printf(\"%d\",p)这个打印的是p,p是一个指针,它指向地址100,这个打印的就是100了printf(\"%d\",*p);打印*p.这个就是地址100里的内容了。因为地址100为系统所用,所以就出错了!赞同
回复

使用道具 举报

千问 | 2011-11-4 12:52:15 | 显示全部楼层
可以自己去调试,看其变化。看执行完int*p=(int*)100;这句之后,跟踪看p的地址值变成多少,值变成多少就知道了。刚调试结果,表明100是地址值。该地址还没有赋值初始化,所以,后面一种方式输出,报错楼上说的有道理,应该是系统所用。改成int*p=(int*)0x00430030;*p=3;赋值就可以输出3赞同
回复

使用道具 举报

千问 | 2011-11-4 12:52:15 | 显示全部楼层
p要求是指针,所以printf(\"%d\",p)不会出错,printf(\"%d\",*p)中的*p取值不是地址赞同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行