指针c ++解释

时间:2011-06-19 04:04:37

标签: c++ pointers reference

我对这段代码感到困惑:

ipPtr = ipPtr + 3; // 5
cout << *ipPtr << endl; 

为什么cout不是5,而是一些随机大数?请有人向我解释。根据我的理解,我认为cout << *ipPtr << endl;指向它上面的*ipPtr。我对吗 ?

#include <iostream>

void main(){
    using namespace std;
    int iaArray[] = {1,2,3,4,5};
    int* ipPtr = 0;

    ipPtr = &(iaArray[1]);
    cout << *ipPtr << endl;//2

    ++ipPtr;
    cout << *ipPtr << endl;//3

    ipPtr = ipPtr + 3; //not 5 but random number. 
    cout << *ipPtr << endl; 
}

3 个答案:

答案 0 :(得分:8)

因为您已经将指针递增超过数组的末尾。您似乎忘记了在向其添加3之前编写了++ipPtr

          &(iaArray[1])
               |
iaArray = { 1, 2, 3, 4, 5 } ?
                  |         |
               ++ipPtr  ipPtr + 3

答案 1 :(得分:0)

因为当你向指针添加3时它已经位于数组的第三个位置,所以它最后会在最后一个元素之后。

答案 2 :(得分:0)

ipPtr = &(iaArray[1]); 

//指向第二个位置(第一个位置为0)

++ipPtr;

//指向第三个位置

//3 + 3 = 6
ipPtr = ipPtr + 3;

数组只有5个位置,所以它打印的内存位置不是5,位于第五位。