Даниэль,
это не сложно.У вас есть основная идея, и нет большой разницы в представлении массивов в памяти.если вы объявляете массив, скажем
void main(){
int arr[5]={0,1,2,3,4};
}
, вы инициализировали (определили) массив.Таким образом, пять элементов будут храниться в пяти смежных местах в памяти.Вы можете наблюдать это, ссылаясь на адрес памяти каждого элемента.В отличие от других примитивных типов данных в C, идентификатор массива (здесь arr ) сам по себе представляет свой указатель.Идея кажется расплывчатой, если вы новичок, но вы будете чувствовать себя комфортно, продолжая.
printf("%d",arr);
эта строка покажет вам адрес памяти первого элемента, arr [0].Это похоже на обращение к адресу первого элемента.
printf("%d",&arr[0]);
Теперь вы можете просматривать ячейки памяти всех элементов.Следующий фрагмент кода выполнит эту работу.
int i;
for(i=0;i<5;i++){
printf("location of %d is %d\n",arr[i],&arr[i]);
}
вы увидите увеличение каждого адреса на промежутки в четыре (если целые числа имеют длину 32 бита).Таким образом, вы можете легко понять, как массивы хранятся в памяти.
вы можете попробовать то же самое, используя другой метод.
int i;
for(i=0;i<5;i++){
printf("location of %d is %d\n",*(a+i),a+i);
}
вы получите тот же набор ответов вв обоих случаях и попытаться получить эквивалентность.
попробуйте один и тот же эксперимент, используя разные типы данных (типы char, float и struct).Вы увидите, как зазоры между соседними элементами варьируются в зависимости от размера одного элемента.
![](https://i.stack.imgur.com/nvDMb.png)