C语言中*和&运算

[复制链接]
查看11 | 回复2 | 2011-6-27 13:00:10 | 显示全部楼层 |阅读模式
以下是我从百度百科里面看见的,不懂,求解释。
假设有这么一段代码:(假设开辟空间时p 被分配给了3001H、3002H 两个位置)
int *p;p=2003;*p=3000H
上面不是说了,内存位置是3001H和3002H吗,怎么又变成了3000H?
 **p的值为多少?
  **p=*(*(p))=*(*(2003H))=*(3000H)=0300H。(这一行是不是写错了?2003H和0300H是怎么来的,2003H应该是2003吧?0300H应该是2003吧?)
  那么&&p、*(&p)和&(*p)又等于多少?
  &&p=&(&(p))=&(3001H),此时出错了,3001H 是个常数怎么可能有地址呢?
  *&p=*(&(p))=*(3001H)=2003H,也就是*&p=p。(2003H是怎么来的?是不是应该是2003?)
  &*p=&(*(p))=&(3000H),读者可能以为&*p=p 此时出错了,3000H 是个常数怎么可能有地址呢? 到底P的地址是3000H还是3001H?我困惑了,求达人详细解释啊,按照我的个人理解*就是取指针所指向的地址的值,&就是取地址,上面那些都是些上面啊,我要抓狂了

回复

使用道具 举报

千问 | 2011-6-27 13:00:10 | 显示全部楼层
p=2003H表示p 被分配给了2003H、2004H,*p=3000H表示2003H、2004H这两个空间存入的数是3000H,(int 型占两个字节)p代表地址,*p代表p地址存入的数据。&p表示变量p的地址你的个人理解正确。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行