codingBlonde Ответов: 1

Может ли кто-нибудь объяснить мне вывод этого кода указателя C++?


#include <iostream>
using namespace std;
int main()
{
 int* a = new int[10];
 for(int i = 0; i<10; i++)
 a[i] = i;
 int* b = &a[2];
 cout << b[3];
}

Output: 5


Что я уже пробовал:

Я не понимаю, почему выход равен 5.

1 Ответов

Рейтинг:
10

Jon McKee

Причиной такого вывода является то, что называется арифметикой указателей. Массивы хранятся последовательно в памяти. Таким образом, смещение от одного значения к другому-это размер типа. Integer = 4 байта, float = 4 байта, double = 8 байт и т. д. Это фундаментальная причина, по которой работает арифметика указателей. Когда вы говорите a[2], то на самом деле вы говорите: "указатель на начало массива (то есть первый элемент) плюс два смещения на сумму целых чисел, чтобы достичь третьего значения." Вы можете проверить это, выполнив "*(a+2)", что даст тот же результат, что и A[2].

Итак, что происходит в коде, который вы опубликовали: адрес (&) a[2] присваивается b. Затем вы печатаете в стандартный выходной поток значение 3 смещений, равное целым числам (b[3]). Это 5.

b[0] = a[2]
b[1] = a[3]
b[2] = a[4]
b[3] = a[5]


CPallini

5.

codingBlonde

Спасибо