указатель с ++ объяснение - PullRequest
0 голосов
/ 19 июня 2011

Я запутался с этим блоком кода:

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 ]

8 голосов
/ 19 июня 2011

Потому что вы увеличили указатель за конец массива. Вы, кажется, забыли, что написали ++ipPtr перед тем, как добавить к нему 3.

          &(iaArray[1])
               |
iaArray = { 1, 2, 3, 4, 5 } ?
                  |         |
               ++ipPtr  ipPtr + 3
0 голосов
/ 19 июня 2011
ipPtr = &(iaArray[1]); 

// Указываем на вторую позицию (первая - 0)

++ipPtr;

// Указываем на третью позицию

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

Массив имеет только 5 позиций, поэтому он печатает все, что находится в этой ячейке памяти, а не 5, которое находится на пятой позиции.

0 голосов
/ 19 июня 2011

Потому что, когда вы добавляете 3 к указателю, он уже находится на третьей позиции массива, поэтому он заканчивается после последнего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...