2. 取地址运算 &
运算符(Operator) 是一种特殊的符号,它用于表示运算规则。运算符可以将 C 语言中的字面值、变量、常量等结合在一起来进行运算并能够取得一个值。
& 运算符
作用:返回变量的内存地址。
计算机的内存是以字节(Byte) 位单位的,每个字节都对应一个不同的整数编号。这个编号称为地址。这个地址是从 0 开始的。 0 地址是第一个字节, 1 地址是第二个字节,以此类推。
对于 32 位的计算机,它的最大地址是 0xFFFFFFFF,即 4G 的大小。对于 64 位的计算机系统。它的最大地址是 0xFFFFFFFFFFFFFFFF。
取地址 & 运算符的语法:
& 变量
说明:
&用于返回变量在内存中的起始地址,如果使用int i;声明一个 int 类型的变量 i 占用 4 个字节,地址分别为0x????a5f4、0x????a5f5、0x????a5f6、0x????a5f7。则&i返回的值为0x????a5f4(这里????表示地址的高位字节的值,此处省略不写了)。
示例:
#include <stdio.h>
int main(int argc, char *argv[]) {
int x = 0;
int y = 100;
double d1 = 3.14;
double d2 = 2.71828;
printf("&x:%p, &y:%p, &d1:%p, &d2:%p\n", &x, &y, &d1, &d2);
return 0;
}
运行结果:
&x:0x7ffc6e94a5f0, &y:0x7ffc6e94a5f4, &d1:0x7ffc6e94a5f8, &d2:0x7ffc6e94a600
可见变量 x 的实际地址是 0x7ffc6e94a5f0,占用 4 个字节。变量 y 的实际地址是 0x7ffc6e94a5f4,占用 4 个字节。变量 d1 的实际地址是 0x7ffc6e94a5f8,占用 8 个字节。变量 d2 的实际地址是 0x7ffc6e94a600,占用 8 个字节。
各个变量的内存结构如下图所示:
x y d1 d2
+----+ +--------+--------+----------------+----------------+ +----+
| | ... | 0 | 100 | 3.14 | 2.71828 | ... | |
+----+ +--------+--------+----------------+----------------+ +----+
0x0 a5f0 a5f4 a5f8 a600 a608 ... 0xFFFF
&x &y &d1 &d2
这里用十六进制的后四位表示内存地址的具体值。
实验:
写程序定义多个字符型变量和多个短整型变量,然后打印器地址,画出它的内存结构图,