Когда вы используете malloc для массива, он действительно выделяет пространство для хранения множества элементов в массиве.Вот почему вы предоставляете malloc тип данных * емкость, больше ничего не нужно хранить в куче.
Как говорилось в предыдущих ответах, когда вы передаете массив в функцию, все, что хранится в стеке, это временный указатель, содержащий местоположение массива в куче.Поэтому, если вы измените значение, оно последует за указателем и изменит его там.
В этом случае не имеет значения, где были предварительно сохранены значения (переменная в стеке или другое значение в куче).) потому что когда он помещен в массив, единственное, что передается, - это значение.
Проблема, о которой вы думаете, возникнет, если вместо копирования значений из переменных в стеке вы заполните массивуказатели на переменные стека, в этом случае значения могут быть перезаписаны.Пока значения находятся в динамической памяти при выходе из функции, они в целости и сохранности.
Использование malloc для каждого элемента, который вы хотите добавить в массив, было бы кошмаром и победило бы цельразмещения массива в первую очередь.