PAVAN KUMAR Ответов: 4

Как я могу написать для этого программу на языке Си?


write a c program such that

1)i want to add the elements in an array dynamically till required
2)i don't wanna scan how many elements i need in the beginning
3)i should be able to stop adding the elements whenever i want and i should be able to display it
4)i should be still able to add the elements even though if i displayed it already


Что я уже пробовал:

я уже пробовал таким образом, что я смогу сканировать количество элементов, необходимых в начале
но я не хочу сканировать его в самом начале. я должен быть в состоянии добавлять элементы до тех пор, пока это не потребуется

F-ES Sitecore

Массивы фиксированы, поэтому вам нужно либо создавать новый массив каждый раз, либо использовать связанный список и, возможно, конвертировать связанный список в массив, когда вы закончите добавлять элементы.

PAVAN KUMAR

массивы фиксированы.
но разве это невозможно, если мы используем динамическое распределение?

4 Ответов

Рейтинг:
2
Рейтинг:
2

KarstenK

Конечно, вы можете сделать это в C и самостоятельно, когда используете перераспределение функция, которая увеличивает выделенный блок памяти. Если это домашнее задание, то спросите своего учителя, разрешено ли вам использовать какой-то код github.

Но имейте в виду, что вы лучше понимаете модель распределения памяти с.

Не верьте никому, что "вы не можете сделать это в C". никогда, никогда не верьте такой грязной лжи ;-)


Stefan_Lang

Вы правы - я собирался предложить что-то еще и совершенно забыл о realloc(). Он идеально подходит.

KarstenK

некоторые malloc с большим размером также были бы возможны, но realloc избегает копирования существующих данных в буфер. ;-)

Рейтинг:
2

megaadam

В основном то, что Грифф сказал выше. используйте realloc(...) - с удвоением емкости - когда массив заполняется. Вам также нужно будет сохранить используемый размер массива. Я бы поставил это в начале массива. Приведенное выше решение github, вероятно, чрезмерно разработано для вашего случая, если вам не нужно вставлять и удалять.


Рейтинг:
1

OriginalGriff

В языке Си нет такого понятия, как "расширяемый массив" - это размер, с которого он начинается на протяжении всего срока службы приложения.

Есть два способа сделать то, что вы хотите, оба относительно сложные в C.
1) Создайте свой собственный массив и предоставьте методы для возврата начала, количества используемых элементов и добавления элемента. Начните с N элементов и добавляйте элементы, пока не достигнете этого. Затем создайте массив в два раза больше текущего размера и скопируйте в него все существующие элементы. Затем добавьте новый элемент и отбросьте исходный массив.
2) Не используйте массив, используйте связанный список. Это позволяет добавлять новые элементы по мере необходимости, но требует от вас умения работать с указателями.


PAVAN KUMAR

я знаю, что делать со связанным списком.
у меня просто есть сомнения, почему я не могу работать с массивами.
спасибо :)

OriginalGriff

Всегда пожалуйста!