内存地址与 &

每个变量都住在内存里的一个“房间”,& 就是它的门牌号。

CSP-J

◎学完你会

1看一看:变量的门牌号

int a = 5, b = 8, c = 2; cout << sizeof(int); // 每个 int 占 4 字节 cout << &a << " " << &b << " " << &c; // 打印三个变量的地址
每个变量有自己独立的“房间号”(地址),相邻声明一般也挨得近,但绝不重叠。

2关键命令

写法含义结果
&a取变量 a 的地址一个十六进制数,如 0x7ffe...
cout << &a把地址打印出来内存中的位置
int 占 4 字节每个变量占一块连续内存4 个 byte
地址是内存的“坐标”。你不需要记住具体数字,只要理解:每个变量都住在某个地址上,& 就是找到它房间号的钥匙。

⚠易错点

& 有两副面孔:单独用是取地址(&a 得门牌号);跟在类型后面是引用(int &x 是别名)。看它在赋值号左边还是右边、前面有没有类型。
地址每次都不同:程序每次运行、编译器安排不同,地址数字会变。别在代码里写死某个地址。

?跨学科:地址就像“快递柜的格子号”

内存=一排排快递柜,每个变量占一个(或几个)格子,& 告诉你它在第几柜第几格。 你要取件(读值)直接按格子取;要放新东西(赋值)也往那个格子里放——格子号(地址)本身和你存了什么无关,它只是定位信息。

这也像档案柜的编号:编号不决定档案内容,但所有查找都先要编号。理解“值与位置是两回事”,是学指针的第一步。

✎练一练

int a=5; cout << &a; 屏幕上显示的是?
&a 取的是变量 a 的地址,不是它的值 5。地址用十六进制打印,看起来像 0x7ffe...。
说出 & 的两种身份,各举一个例子。
答案:①取地址:int *p = &a;(把 a 的门牌号存进指针);②引用:void f(int &x)(x 是实参的别名)。看 & 前面有没有类型、用在赋值左侧还是右侧。