A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© badbaby 初级黑马   /  2015-5-22 12:24  /  632 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

#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");
}
请问本程序的输出显示是什么?

点评

请到ios板块发帖!  发表于 2015-5-22 18:51

7 个回复

倒序浏览
not equal !/n   
  ==  是比较的两个对象的地址值   
在赋值过程中 最后给a赋值的是p指针的内容不是地址值 所以 不相等 输出 else 的内容 ,个人理解~~~~
回复 使用道具 举报
。。。。。
小尴尬
刚才没看到这一句~~~~p = &a;
  应该是输出相等的那一句~~~~~~~~~~原谅老夫吧
回复 使用道具 举报
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


回复 使用道具 举报
额   有点乱 刚才貌似又搞错了~~~

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

a = (int )(&(*p));//取p指针的内容给a       这一句 解读应该是  先取p指针的内容 即  *p   然后再将这个内容的地址值赋给a  &(*p)  所以 a 和 p  的地址值相等   我自己都乱了  看最后一个答案吧  前面的都无视吧
  我也是基本现学的以前的学过一部分忘得差不多了     * 是取内容   & 是取地址值     括号是从里到外读 。
回复 使用道具 举报
我的上帝啊 绕死我了
回复 使用道具 举报
晕了。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马