2011-06-19 111 views
0

我很困惑与代码块:指针C++解释

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; 
} 
+5

您指向数组的末尾之外。数组的大小是5,而你指向的是第6个元素,这就是你得到一些随机数的原因。 2 + 1 + 3 = 6不是5 :) –

+0

你有机会接受其中一个答案吗? –

回答

0

因为当你给指针加3时它已经在数组的第三个位置,所以它在最后一个元素后面结束。

8

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

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

+1为图。 –

0
ipPtr = &(iaArray[1]); 

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

++ipPtr; 

//指向到第三位置

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

阵列只有5个位置所以它打印什么是在那个内存位置不是5,这是在第五个位置。