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

2025-03-10 21:43:15
推荐回答(4个)
回答1:

2016-08-18回答提交,2019-05-17作文字修改如下——
int *p=(int *)100;这样说吧,这条语句没有任何错误,只是平时谁也不这么用而已。这就是把100这个十进制整型数强制变成了地址值00000000 00000000 00000000 01100100赋给了整型指针(能指向整型数的指针)p。printf("%d",p)和printf("%d",*p)语法上都对,前者是输出指针变量p自身的值,它就是上面提到的十进制数100,若用printf("%X",p)输出的话就是上面那串二进制数的十六进制00000064。后者*p是取p指向的目标内容,也就是地址100中的内容;现在的问题是你没有给100这个地址中放内容,而且100这个地址是不是系统允许用户操作也未知;如果允许操作,那么在int *p=(int *)100; 后加一句*p=123(随便一个数),就会打出123这个数来;如果不允许操作,那仍然要报错……

回答2:

可以自己去调试,看其变化。看执行完int *p=(int *)100;这句之后,跟踪看p的地址值变成多少,值变成多少就知道了 。
刚调试结果,表明100是地址值。该地址还没有赋值初始化,所以,后面一种方式输出,报错
楼上说的有道理,应该是系统所用。改成int *p = (int *)0x00430030; *p = 3;赋值就可以输出3

回答3:

printf("%d",p) 这个打印的是p, p是一个指针,它指向地址100,这个打印的就是100了
printf("%d",*p); 打印*p.这个就是地址100里的内容了。因为地址100为系统所用,所以就出错了!

回答4:

p要求是指针,所以printf("%d",p)不会出错,printf("%d",*p)中的*p取值不是地址