Адрес массива также является адресом его первого элемента. Это связано с тем, что сам массив в памяти состоит только из каждого из его элементов (начиная с индекса 0) по очереди. Поэтому, если A
является массивом, &A[0]
указывает на ту же память, что и A
. (Обратите внимание, что существует техническая разница между массивом типов целых чисел и указателем на целочисленный тип, хотя они во многих случаях взаимозаменяемы, поскольку предыдущие распаковываются в последнее при определенных обстоятельствах, которые выходят за рамки этого вопроса, это почему я описал их как указывающие на одну и ту же память).
Вы спрашивали о первом элементе, а затем ссылались на A[1]
. Обратите внимание, что A[1]
является вторым элементом. A[0]
- первый элемент.
Так что в вашем конкретном примере, вы могли бы сделать:
int *A = (int *)0x00006ffd29c78e70;
int *A1 = &A[1]; // points to second element
int foo = *A1; // second element contents
или с использованием арифметики указателей
int *A = (int *)0x00006ffd29c78e70;
int *A1 = A+1; // points to second element
int foo = *A1; // second element contents
Обратите внимание на +1
не добавит к (байт) адрес, но увеличивает значение указателя по одному int
.
Примечание. Я написал int
выше - используйте правильный целочисленный тип данных для представления вашего 4-байтового целого.
'& A [ 1] '? Или что конкретно неясно? – UnholySheep
Данные 'T arr [N];' 'arr + i' или' & arr [i] '- адрес i-го элемента. – DeiDei
@ UnholySheep, извините, должно быть, было яснее; должен иметь указанный неизвестный массив !, отредактирует его. – AAAgradebeef