Динамическое создание объектов в C - PullRequest
1 голос
/ 30 января 2012

Здравствуйте, ребята!

Я знаком с JavaScript и PHP, но новичок в C. Я пытаюсь поиграть с графикой на C и алгоритмом craete colision.Теперь мне нужно создавать объекты динамически, как в более продвинутых языках.Например, мне нужно создать многоугольник с помощью моей собственной функции и сделать его объектом, который будет виден всему сценарию.Я предполагаю, что структура будет необходима.

Насколько я знаю, все, что объявлено в функции, остается в функции.Как я могу динамически объявить глобальные структуры?

Ответы [ 4 ]

2 голосов
/ 30 января 2012

C - довольно статичный язык.Под статическим я имею в виду, что вы можете создавать память во время выполнения, но вам понадобятся указатели для адресации памяти, объявленной во время компиляции.То есть, если вам понадобится память во время выполнения и вы не хотите объявлять ее во время компиляции, вам нужно будет использовать malloc и free (когда вы закончили с памятью).

Чтобы создать глобальную структуру, память которой вы будете создавать во время выполнения, вам будет минимально необходим указатель на структуру во время компиляции.Если вам нужно несколько таких структур, вы можете создать память для нескольких структур, но обход этих структур будет утомительным без наличия массива этих структур.Вам понадобится этот массив указателей на структуры во время компиляции.Есть несколько способов сделать это более динамичным, но примерно через десятилетие я использовал C и C ++, мы никогда не сталкивались с этими другими способами, в том числе с драйверами устройств.не иметь никаких объектов, которые вы можете создать, кроме тех, которые созданы путем вызова функции из библиотеки или создания памяти из кучи, а затем интерпретировать эту память путем наложения на нее структуры или указателей массива.параметры передаются по ссылке (указатель на параметр), и функции могут ничего не возвращать или возвращать один атом данных, символ, целое число, smallint или указатель.

2 голосов
/ 30 января 2012

Вам нужна структура или более сложный абстрактный тип данных (ADT) для хранения динамически создаваемых переменных.Когда у вас есть это, вы можете создать любой объект, который вы хотите, с помощью malloc () и сохранить его там.

Как я упоминал ранее, настоятельно рекомендуется взглянуть на ADT и узнать, какработать с ними.Это позволит вам создать любую сложную структуру данных, такую ​​как очереди или связанные списки, чтобы работать немного более ориентированной на ООП.

2 голосов
/ 30 января 2012

объявляет глобальные указатели (массив указателей) того же типа, что и структура.Используйте такие функции, как malloc и т. Д., Чтобы динамически распределять память и назначать ее указателям.

2 голосов
/ 30 января 2012

а.функция может возвращать значение.

b.Вы можете использовать глобальные переменные.

c (и, вероятно, самые полезные).динамически распределять память (используя malloc и т. д.) и возвращать указатель на нее.(И не забудьте освободить его после использования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...