Правильно ли я понимаю, что массив создается и на куче и на стеке, но как он выбирает, куда ему класть значения. Или он кладет первые три элемента в куче, так как в первых трех элементах лежит адрес на кучу, а остальные на стеке.
int c[6];
*c = (int)malloc(3 * sizeof(int));
c[1] = 5;
c[2] = 3;
c[5] = 53;
printf("%d %d %d", c[1], c[2], c[5]);
int c[6];
*c = (int)malloc(3 * sizeof(int));
В стеке выделяется массив на 6 целых знаковых 32битных(как правило, но не обязательно, может быть и 16 бит) чисел, затем по индексу 0 этого массива присваивается число - адрес в памяти, который указывает на только что выделенный в куче массив на три таких же числа.
Выражение вида *(c + n) эквивалентно с[n], в вашем случае n равно 0.
Правда, непонятно, зачем вы присваиваете элементу одного массива адрес другого...
У вас один массив - в стеке, массив c. Второй якобы массив из трех int у вас выделяется в куче, но все, что вы с ним делаете - это преобразуете его адрес в int (если получится) и сохраняете его в c[0]. Все
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости