黑马程序员技术交流社区
标题:
急求详解(指针块)
[打印本页]
作者:
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