Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.94
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 02:28     Обобщенный указатель типа void #1
В приложенной картинке рассказывается о динамическом распределении памяти в С. Сказано, что функция malloc() возвращает указатель типа void. Что это вообще значит?! Функции void не могут возвращать значения! А тут ещё какой-то обобщенный указатель! О_о
Миниатюры
Обобщенный указатель типа void  
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
08.01.2012, 02:32     Обобщенный указатель типа void #2
Это указатель без привязки к типу. Просто хранит некий адрес
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 02:46  [ТС]     Обобщенный указатель типа void #3
Зачем же его тогда void-ом обозвали? Это же сбивает с толку. Сделали бы int к примеру...
И смысл тогда от того, что указатели объявляют с типом? Ну помимо случая с указателем на начало массива, когда от типа зависит куда он будет указывать при p++.
Jupiter
08.01.2012, 02:47
  #4

Не по теме:

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

Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 03:16  [ТС]     Обобщенный указатель типа void #5
Просто сказать - указатель. Ну это в любом случае перебор.
А вот int лучше, чем void. А потом его уже приводить к нужному типу. Потому что писать void перед функцией, которая возвращает указатель... Тип void же для того, чтобы показать, что функция ничего не возвращает.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.01.2012, 03:22     Обобщенный указатель типа void #6
товарищ void и void* это разные вещи путать их ну никак нельзя
Tamoren
0 / 0 / 0
Регистрация: 08.01.2012
Сообщений: 37
08.01.2012, 03:43  [ТС]     Обобщенный указатель типа void #7
Все, я понял. Не с той стороны копал: "ключевое слово void впервые появилось в Си++ для поддержки концепции обобщенных указателей". Это всё объясняет. Всем спасибо!
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
08.01.2012, 04:49     Обобщенный указатель типа void #8
Цитата Сообщение от Tamoren Посмотреть сообщение
Зачем же его тогда void-ом обозвали? Это же сбивает с толку. Сделали бы int к примеру...
ага, выделяем мы память под массив символов char, a malloc нам раз и указатель на int

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

Не по теме:

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

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

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

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

Добавлено через 17 минут
Цитата Сообщение от Tamoren Посмотреть сообщение
А вот int лучше, чем void. А потом его уже приводить к нужному типу.
И кстати, на 64-битных платформах указатели 64-битные, а int так и остался 32-битный.
Поэтому очень не рекомендуется хранить указатели в int.
Для хранения указателей в целочисленных типах нужно использовать типы size_t, либо ptrdiff_t.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 02:17     Обобщенный указатель типа void #15
void поддерживается только в среде VS?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.01.2012, 02:21     Обобщенный указатель типа void #16
Цитата Сообщение от Whiteha Посмотреть сообщение
void поддерживается только в среде VS?
при чём здесь VS? void - ключевое слово языка С++(и не только его), и и что касается данного ключевого слова то оно везде одинако во всех компиляторах С++
kisssko
31 / 31 / 2
Регистрация: 19.12.2011
Сообщений: 72
11.01.2012, 06:48     Обобщенный указатель типа void #17
Цитата Сообщение от Whiteha Посмотреть сообщение
void поддерживается только в среде VS?
Пожалуй, и не найти сейчас компиляторов, которые не поддерживали бы void.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
11.01.2012, 12:23     Обобщенный указатель типа void #18
Просто в NetBeans оно вроде как не определялось, хотя теперь я уже не уверен=\
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2012, 12:32     Обобщенный указатель типа void
Еще ссылки по теме:

C++ Преобразовать указатель одного типа в указатель другого.
Арифметика указателей (указатель на void*) C++
C++ Обобщенный указатель на шаблонный класс

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
11.01.2012, 12:32     Обобщенный указатель типа void #19
демонстрация
Yandex
Объявления
11.01.2012, 12:32     Обобщенный указатель типа void
Ответ Создать тему
Опции темы

Текущее время: 23:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru