注册 登录
编程论坛 C++教室

新人的问题 希望达人帮忙

wjire 发布于 2007-06-29 17:44, 509 次点击
int a=10;
int *pa=&a;
cout<<&pa<<'\t'<<pa<<endl;

书上说 &pa 是pa的地址
pa 是a的地址
小弟实在是不明白
请帮忙


6 回复
#2
yushui2007-06-29 18:21
&amp;是取地址啊  所以&amp;pa取pa的地址  *pa=&amp;a是将a的地址赋给pa  
#3
wjire2007-06-29 19:22
但是我看运行结果 2个地址很接近 只是末位数字差了2
它们2者有什么联系吗?
#4
huozoo2007-06-29 19:22
你要理解pa是什么?是指针变量。
用来做什么?存放地址。
就像你这道题目,把a 的地址赋给了指针变量pa,所以pa->a的地址。
理解了这点,我们再来理解&pa。你定义了pa是指针变量,它也是有地址的。
指针变量是存放地址的变量。这样理解```
我知道这是刚学指针时大家经常问的问题,在此详细说明下。
希望你看后能理解。[em04
#5
野比2007-06-29 19:22
假设内存如下(框内为内存单元值, 框外为内存单元地址):
*----*
| 10 |1001 a变量
*----*
|1001|1002 pa指针
*----*

可以看到, a的值是10, 就是在int a=10;这句设置的.
对于第2句int *pa=&a;
前面的int * 是定义指向int的指针, 也就是pa是个指针
后面&a, 如yushui所说, &是取地址运算符, 提取a变量的地址, 这里就是1001, 所以&a=1001
于是pa的内容就是1001(如图)..
第3句cout那句, &pa是对pa取地址, 也就是1002, pa是直接使用指针, 即1001
#6
野比2007-06-29 19:28
你看到的差了2 就和我例子里的1001, 1002一样 是连续分配空间造成的.
根据变量的内存大小不同, 相差可能是2, 4, 或其他..
使用sizeof(变量)操作查看变量占用的内存大小(字节).
比如
sizeof(char) -> 1
sizeof(int) -> 4 (因系统而异)
#7
wjire2007-06-29 19:30
强 感谢啊
太感谢了

1