Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/47: Рейтинг темы: голосов - 47, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37

Обобщенный указатель типа void

08.01.2012, 02:28. Показов 9662. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В приложенной картинке рассказывается о динамическом распределении памяти в С. Сказано, что функция malloc() возвращает указатель типа void. Что это вообще значит?! Функции void не могут возвращать значения! А тут ещё какой-то обобщенный указатель! О_о
Миниатюры
Обобщенный указатель типа void  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2012, 02:28
Ответы с готовыми решениями:

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct обобщение{ключ; void* на что угодно}...

Указатель типа void
Добрый день. enum Type { Double, Int, Float }; void func(int k,enum Type t,...) { void *pv; pv = (...); ... }

Указатель типа void c++
Haпример указатель типа void*ptr char *p void *ptr="abs"; p=((char *)ptr);Так указатель неопределённого типа, присваивается к...

18
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
08.01.2012, 02:32
Это указатель без привязки к типу. Просто хранит некий адрес
1
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 02:46  [ТС]
Зачем же его тогда void-ом обозвали? Это же сбивает с толку. Сделали бы int к примеру...
И смысл тогда от того, что указатели объявляют с типом? Ну помимо случая с указателем на начало массива, когда от типа зависит куда он будет указывать при p++.
0
08.01.2012, 02:47
Лучший ответ Сообщение было отмечено как решение

Решение

Не по теме:

Цитата Сообщение от Tamoren Посмотреть сообщение
Сделали бы int к примеру...
а указатель на int как обозвать? Tamoren-ом?

4
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 03:16  [ТС]
Просто сказать - указатель. Ну это в любом случае перебор.
А вот int лучше, чем void. А потом его уже приводить к нужному типу. Потому что писать void перед функцией, которая возвращает указатель... Тип void же для того, чтобы показать, что функция ничего не возвращает.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
08.01.2012, 03:22
товарищ void и void* это разные вещи путать их ну никак нельзя
2
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 03:43  [ТС]
Все, я понял. Не с той стороны копал: "ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей". Это всё объясняет. Всем спасибо!
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
08.01.2012, 04:49
Цитата Сообщение от Tamoren Посмотреть сообщение
Зачем же его тогда void-ом обозвали? Это же сбивает с толку. Сделали бы int к примеру...
ага, выделяем мы память под массив символов char, a malloc нам раз и указатель на int

Цитата Сообщение от Tamoren Посмотреть сообщение
Все, я понял. Не с той стороны копал: "ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей". Это всё объясняет. Всем спасибо!
Какраз таки не поняли, void это не тип, это указание что тип не известен, malloc возвращает void с условием что Вы уже сами знаете тип и укажете его, например
C
1
char*c=(char*)malloc(sizeof(char)*10);
Здесь мы указываем что полученный указатель на void мы приводим к типу указатель на char и потом уже присваиваем нашей c.
0
08.01.2012, 04:50

Не по теме:

Цитата Сообщение от Gepar Посмотреть сообщение
malloc возвращает void
лучше допиши слово указатель, а то кто не так поймет и холивар затеит

1
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 04:57  [ТС]
По сути то возвращает адрес, которому по барабану, в каком указатель виде представить...

Цитата Сообщение от Gepar Посмотреть сообщение
ага, выделяем мы память под массив символов char, a malloc нам раз и указатель на int
В данном ислучае использовать приведение. смысл был в том, что нужно дать функции тип по умолчанию, а остальные приведением. можно char по умолчанию дать, к тому же они наверно чаще используются.

Цитата Сообщение от Gepar Посмотреть сообщение
Какраз таки не поняли, void это не тип, это указание что тип не известен, malloc возвращает void с условием что Вы уже сами знаете тип и укажете его
Да понял я Повикипедил, там все подробно описано: откуда, почему и зачем. Просто я не учел, что void был создан не для того, чтобы показать, что функция ничего не возвращает.
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
08.01.2012, 05:03
Цитата Сообщение от Tamoren Посмотреть сообщение
Просто я не учел, что void был создан не для того, чтобы показать, что функция ничего не возвращает.
Нет, там он используется только потому что нельзя оставлять пустое место если функция ничего не возвращает так как по старому стандарту си (точнее фактически когда не было этого самого стандарта) если у функции не написано какой тип она возвращает то это int, там же можно было писать
C
1
2
3
4
5
main()
{
...
return 0;
}
так как нужно было оставить эту совместимость то и используется void в таких случаях. Но если у вас функция возаращает void* (указатель на void то Вы должны понимать что это не "указатель на ничто == ничто").
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.01.2012, 12:11
Цитата Сообщение от Tamoren Посмотреть сообщение
Все, я понял. Не с той стороны копал: "ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей". Это всё объясняет. Всем спасибо!
Ну ты дал! А как же на чистых сях описывались функции, не возвращающие значений (то есть форм ально функции, а фактически процедуры)?
0
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
11.01.2012, 00:42  [ТС]
Википедия
0
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
11.01.2012, 01:39
Цитата Сообщение от Tamoren Посмотреть сообщение
Зачем же его тогда void-ом обозвали? Это же сбивает с толку. Сделали бы int к примеру...
И смысл тогда от того, что указатели объявляют с типом? Ну помимо случая с указателем на начало массива, когда от типа зависит куда он будет указывать при p++.
Совершенно не сбивает с толку. Этот тип зовётся void* (указатель на тип void).
Не стоит путать void* с void - это разные типы.

Добавлено через 17 минут
Цитата Сообщение от Tamoren Посмотреть сообщение
А вот int лучше, чем void. А потом его уже приводить к нужному типу.
И кстати, на 64-битных платформах указатели 64-битные, а int так и остался 32-битный.
Поэтому очень не рекомендуется хранить указатели в int.
Для хранения указателей в целочисленных типах нужно использовать типы size_t, либо ptrdiff_t.
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 02:17
void поддерживается только в среде VS?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.01.2012, 02:21
Цитата Сообщение от Whiteha Посмотреть сообщение
void поддерживается только в среде VS?
при чём здесь VS? void - ключевое слово языка С++(и не только его), и и что касается данного ключевого слова то оно везде одинако во всех компиляторах С++
0
32 / 32 / 4
Регистрация: 19.12.2011
Сообщений: 72
11.01.2012, 06:48
Цитата Сообщение от Whiteha Посмотреть сообщение
void поддерживается только в среде VS?
Пожалуй, и не найти сейчас компиляторов, которые не поддерживали бы void.
0
Программист
33 / 33 / 8
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 12:23
Просто в NetBeans оно вроде как не определялось, хотя теперь я уже не уверен=\
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
11.01.2012, 12:32
демонстрация
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2012, 12:32
Помогаю со студенческими работами здесь

Указатель типа void на функцию, вызов функции
Необходимо с помощью указателя типа void запустить функцию. void func(int); int main(){ void *ptr_void; ptr_void=&func; ...

Функция принимает указатель на void и возвращает указатель на int
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Обобщенный указатель на шаблонный класс
Здравствуйте. Имеется класс template <typename T> class TListManager { protected: TList <T> *head; TList <T> *tail; ...

Указатель на void
Как можно сделать универсальную функцию, которая принимает указатель на неопределенный тип, увеличивает значение на которое указывает этот...

Указатель void на структуру
Есть некий тип структуры action. Для функции _beginthread третьим параметром требуется указатель на void. Как преобразовать структуру в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru