Давайте сначала рассмотрим простой пример:
int a;
a = 5;
В некотором смысле целое число a имеет два значения, связанных с ним.Первое, о чем вы, скорее всего, думаете в первую очередь, это rvalue, которое в данном случае является числом 5. Существует также то, что называется lvalue (произносится как «значение el»), то есть адрес памяти - целое число a находится по адресу.
Это важная концепция для понимания.В конце концов, все дело в памяти.Мы храним код и переменные в памяти.Процессор выполняет инструкции, которые находятся в памяти, и выполняет действия с данными, которые также находятся в памяти.Это всего лишь память.Ничего очень сложного;если кто-то пытается напугать вас указателями, не слушайте, это всего лишь память:)
Отлично, в случае массива мы имеем дело с непрерывным блоком памяти, который используется для хранения данныхтот же тип:
int array[] = {0, 1, 1, 2, 3, 5, 8, 13, 21};
Как вы уже отметили, имя массива относится к ячейке памяти первого элемента в массиве (например, array == & array [0]).Так что в моем примере массив выше & array [2] будет ссылаться на область памяти (или lvalue), которая содержит третий элемент в массиве.
Чтобы ответить на ваш другой вопрос, массив - это просто еще один адрес памяти, посмотрите, если этофрагмент кода помогает понять, на что он указывает:)
#include <stdio.h>
#include <stdlib.h>
int array[] = {0, 1, 1, 2, 3, 5, 8, 13, 21};
int main(void) {
printf("&array[2] is: %p\n", &array[2]);
printf("&array[0] is: %p\n", &array[0]);
printf("&array is: %14p\n", &array);
exit(0);
}
% gcc test.c
% ./a.out
&array[2] is: 0x100001088
&array[0] is: 0x100001080
&array is: 0x100001080