Каково значение переменной указателя без символа де-ссылки? - PullRequest
0 голосов
/ 10 декабря 2018

Я искал объяснение следующему коду и нигде не могу его найти.Я знаю, что результат 5, но может кто-нибудь объяснить мне, почему это 5?* b равно 2 после того, как от 2-й до последней строки вычислено (я знаю, почему это так), но я не знаю, почему b [3] равно 5. Мне просто нужна последняя объясненная строка.

int* a = new int[10];

for(int i = 0; i < 10; i++)
     a[i] = i;

int* b = &a[2];

cout << b[3];

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

cppreference: operator_member_access - Built-in_subscript_operator

Встроенное нижнее выражение E1[E2] в точности совпадает с выражением *(E1 + E2), за исключением порядка вычисления (поскольку C ++17), то есть операнд-указатель (который может быть результатом преобразования массива в указатель и который должен указывать на элемент некоторого массива или один за концом) настраивается для указания на другой элемент того жемассив, следуя правилам арифметики указателей, и затем разыменовывается.

0 голосов
/ 10 декабря 2018

После присвоения b теперь оно указывает на третий элемент в массиве a (т. Е. Значение «1»).

Выражение b[3] эквивалентно *(b+3) что означает получение значения, которое составляет через три позиции после b (по сути это арифметика указателя - b+3 - это указатель, который на 3 позиции после b. В данном случае 3 целых числа после b),Таким образом, поскольку b указывает на a[2], добавление 3 делает его указателем на a[2+3] или a[5], что равно 5 (поскольку первый цикл равен a[i]==i).

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