指针的运算


除了指定运算符=、取址运算符&与取值运算符*之外,还有+-++--+=-=等运算符可以使用在指针上。

指针的加法与减法与一般数值的加减法不同,在指针运算上加 1 ,是表示前进一个数据类型的内存长度,例如在int类型的指针上加 1,是表示在内存地址上前进 4 个字节的长度,如以下的例子所示范的:

#include <stdio.h>

int main(void) {
    int *p = 0;

    printf("p 位置:%p\n", p);
    printf("p + 1:%p\n", p + 1);
    printf("p + 2:%p\n", p + 2);

    return 0;
}

执行结果:

p 位置:00000000
p + 1:00000004
p + 2:00000008

这个内存地址的显示单位是字节;由于定义的是int类型的指针,所以每加 1 就会前进 4 个字节的长度,如果定义的是double类型的指针,则每加 1 就会前进 8 个字节,如以下的程序所示:

#include <stdio.h>

int main(void) {
    double *p = 0;

    printf("p 位置:%p\n", p);
    printf("p + 1:%p\n", p + 1);
    printf("p + 2:%p\n", p + 2);

    return 0;
}

执行结果:

p 位置:00000000
p + 1:00000008
p + 2:00000010

以上举的例子为指针的加法,在减法上观念也是相同,对指针减 1 即是在内存地址上退后一个数据类型单位的长度。


展开阅读全文