Правильно ли я понимаю, что массив создается и на куче и на стеке, но как он выбирает, куда ему класть значения. Или он кладет первые три элемента в куче, так как в первых трех элементах лежит адрес на кучу, а остальные на стеке.
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]. Все
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Сделал частитчно менеджер загрузки спрайтов и моделей 3dЗагружается через load_manager
Задача: организовать максимально простое программное добавление/удаление строк в таблицу
JS(React native) только изучаю после JAVA, не пойму понять в чем фишка и почему не вызывается функция async внутри функции? Где моя ошибка?
Можно ли использовать setTimeout в качестве установки последовательности? Или может есть лучшие варианты как это сделать? Для примера вот небольшая...