指针的运算


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

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

#include <iostream> 
using namespace std; 

int main() { 
    int *p = 0;

    cout << "p 地址:" << p << endl
         << "p + 1:"  << p + 1 << endl 
         << "p + 2:"  << p + 2 << endl;

    return 0; 
}

执行结果:

p 地址:0
p + 1:0x4
p + 2:0x8

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

#include <iostream> 
using namespace std; 

int main() { 
    double *p = nullptr;

    cout << "p 地址:" << p << endl
         << "p + 1:"  << p + 1 << endl 
         << "p + 2:"  << p + 2 << endl;

    return 0; 
}

执行结果:

p 地址:0
p + 1:0x8
p + 2:0x10

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


展开阅读全文