Я не очень понимаю, почему значения & A [0] и & p отличаются
Это разные объекты в памяти, поэтому они имеют разные адреса.A[4]
- это один объект, p
- это еще один объект, q
- это еще один объект.Назначение заставляет их содержать одно и то же значение, но они по-прежнему являются двумя разными объектами.Вы можете удалить присвоение, и результат будет таким же.
Я также не понимаю, как есть только 4 байта между q и & q, хотя размер q показан как 8
q
имеет адрес p
, а &p
дает адрес q
.Результат 4
имеет смысл, потому что вот такой большой p
.Вот почему q
идет 4
после p
, потому что p
занимает 4
байт.
Возможно, будет более понятно, если вы попробуете то же самое со ссылкой:
int A[4] = { 20, 30, 40, 50 };
int &p = A[0]; // note the "&", this makes p a reference
std::cout << "&A[0]: " << &A[0] << std::endl << "&p: " << &p << std::endl;
Для меня это приводит к:
&A[0]: 008FFD90
&p: 008FFD90
Теперь p
не отдельный объект, который может содержать копию данных, а фактическая ссылка на то же место.