2011-06-19 52 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,這是在第五個位置。