黑马程序员技术交流社区

标题: 急求详解(指针块) [打印本页]

作者: badbaby    时间: 2015-5-22 12:24
标题: 急求详解(指针块)
#include "stdio.h"
int main()
{
int a;
int *p;
p = &a;
*p = 0x500;//给a赋值
a = (int )(*(&p));//取p的地址的内容给a
a = (int )(&(*p));//取p指针的内容给a
if(a == (int)p)
     printf("equal !/n");
else
     printf("not equal !/n");
}
请问本程序的输出显示是什么?


作者: 志行    时间: 2015-5-22 13:31
not equal !/n   
  ==  是比较的两个对象的地址值   
在赋值过程中 最后给a赋值的是p指针的内容不是地址值 所以 不相等 输出 else 的内容 ,个人理解~~~~
作者: 志行    时间: 2015-5-22 13:34
。。。。。
小尴尬
刚才没看到这一句~~~~p = &a;
  应该是输出相等的那一句~~~~~~~~~~原谅老夫吧
作者: 志行    时间: 2015-5-22 13:47
p = &a;    把 a 的地址值给 p     p的值为 a 的地址值
*p = 0x500    指针P所指的内存地址值的内容为   0x500      同时由于上一步 p的值为a的地址值,所以改地址值的内容为0x500,即  a 锁代表的值是500
a = (int )(*(&p));   这一部相当于int *a ; a=&p      再次把p 的地址值 赋给a  ,此前 将a的地址值赋值给了p,现在又吧 p的地址值赋值给了a,所以 a和 p 有了相同的地址值。
a = (int (&(*p)));   相当于 int a  ; a=(&(*p))    ,把p地址值中的内容赋值给了a。
所以现在 p 和  a  应该是无论地址值和内容都是相等的  无论用 == 还是equals 都是相等的~~~~

所以  输出正确的拿一个 即    "equal !/n



作者: 志行    时间: 2015-5-22 13:52
额   有点乱 刚才貌似又搞错了~~~

这一题是输出equal !/n 没错了

a = (int )(&(*p));//取p指针的内容给a       这一句 解读应该是  先取p指针的内容 即  *p   然后再将这个内容的地址值赋给a  &(*p)  所以 a 和 p  的地址值相等   我自己都乱了  看最后一个答案吧  前面的都无视吧
  我也是基本现学的以前的学过一部分忘得差不多了     * 是取内容   & 是取地址值     括号是从里到外读 。
作者: tougboy    时间: 2015-5-22 15:43
我的上帝啊 绕死我了
作者: badbaby    时间: 2015-5-24 21:26
晕了。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2