2. 取地址运算 &

运算符(Operator) 是一种特殊的符号,它用于表示运算规则。运算符可以将 C 语言中的字面值、变量、常量等结合在一起来进行运算并能够取得一个值。

& 运算符

作用:返回变量的内存地址。

计算机的内存是以字节(Byte) 位单位的,每个字节都对应一个不同的整数编号。这个编号称为地址。这个地址是从 0 开始的。 0 地址是第一个字节, 1 地址是第二个字节,以此类推。

对于 32 位的计算机,它的最大地址是 0xFFFFFFFF,即 4G 的大小。对于 64 位的计算机系统。它的最大地址是 0xFFFFFFFFFFFFFFFF

取地址 & 运算符的语法:

& 变量

说明:

示例:

#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

这里用十六进制的后四位表示内存地址的具体值。

实验:

写程序定义多个字符型变量和多个短整型变量,然后打印器地址,画出它的内存结构图,