2011-06-19 22 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 not 5 :) –

+0

あなたは答えの1つを受け入れるつもりですか? –

答えて

0

ポインタに3を追加すると、すでに配列の3番目の位置にあるので、最後の要素の後ろで終わるためです。

8

ポインタが配列の末尾を超えて増えたためです。あなたはそれに3を加える前に++ipPtrと書いたことを忘れてしまったようです。

++ipPtr; 

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

+1の図です。 –

0
ipPtr = &(iaArray[1]); 

//第2の位置にポインティング(最初のものは0)配列のみ5つの位置を有する

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

第三の位置に//ポインティング5番目の位置ではなく、そのメモリ位置にあるものはすべて印刷されます。