设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
int *p=(int *)100; 数字转换成int类型的指针? ...
返回列表
发新帖
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取值不是地址赞同
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行