Почему адреса элементов массива находятся в памяти не по порядку - C (СИ)
Формулировка задачи:
Приветствую! Подскажите пожалуйста почему адреса элементов массива находятся в памяти не по порядку? почему и где происходит изменение адресов после выполнения функции sorting()?
#define SIZE 10
void sorting(int *massiv, int *general, int *generalPtr)
{
printf("%d %d\n", massiv[0], massiv[7]);
int z = 0;
for (int x = 0; x < SIZE; x++)
if ((*general > massiv[x]) && (massiv[x] > *generalPtr))
{
*generalPtr = massiv[x];
generalPtr = &massiv[x];
}
for (int c = 0; c < SIZE; c++)
{
printf("massiv[%d] %p\n",c,massiv[c]);
}
printf("%p\n", *generalPtr);
z = *general;
*general = *generalPtr;
*generalPtr = z;
}
int main(void)
{
int massiv[10] = { 37,2,6,4,89,8,10,12,68,45 };
int *general = massiv;
int general_ret = 0;
int *generalPtr = &general_ret;
for (int c = 0; c < SIZE; c++)
{
printf("massiv[%d] %p\n", c, massiv[c]);
}
sorting(massiv,general, generalPtr);
getch();
}Решение задачи: «Почему адреса элементов массива находятся в памяти не по порядку»
textual
Листинг программы
printf("massiv[%d] %p\n", c, &massiv[c]);
Объяснение кода листинга программы
В данном коде на языке C происходит следующее:
massiv- это название массива, который содержит некоторое количество элементов.c- это переменная, которая используется для индексации элементов массиваmassiv.printf- это функция вывода информации на экран.massiv[c]- это выражение, которое обращается к элементу массиваmassivс индексомc.&massiv[c]- это выражение, которое получает адрес элемента массиваmassivс индексомc.printf(massiv[%d] %p\n, c, &massiv[c]);- это вызов функцииprintf, которая выводит на экран сообщение следующего вида:massiv[c] address of massiv[c]. Таким образом, данный код выводит на экран информацию о том, какие элементы массиваmassivхранятся по каким адресам в памяти.