Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Praud
7 / 7 / 9
Регистрация: 25.02.2013
Сообщений: 237
1

В каких случаях используется тип данных void

02.09.2014, 23:22. Просмотров 1295. Ответов 9
Метки нет (Все метки)

В каких случаях используется этот тип данных при объявлении переменных?
В функциях понятно, когда нечего возвращать. А как он может быть полезен в переменных? ума не приложу. Объясните если можно с примером.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2014, 23:22
Ответы с готовыми решениями:

В каких случаях нужно применять тот или иной тип?
Привет, ребята! Извините за глупый вопрос, только начинаю осваивать язык С. Вопрос такой: в С...

В каких случаях можно заменить break на continue и наоборот и при этом результат не меняется?
Вопрос: В каких случаях можно заменить break на continue и наоборот при этом результат не меняется.

Зачем функции main тип void?
Собственно сабж. Просто не понятно, мы в майне пишем return 0, а для этого вроде бы как не нужен...

Реализовать аналог `void *memmove(void *to, void *from, size_t n)`
Добрый день, подскажите пожалуйста, как реализовать такой метод самостоятельно? который копирует...

<iostream> в каких случаях используется?
Что такое &lt;iostream&gt; расскажите о нем, для чего он используется.

9
S_el
2231 / 1698 / 354
Регистрация: 15.12.2013
Сообщений: 6,777
02.09.2014, 23:39 2
О void переменных я не слышал ничего и подозреваю,что их не существует.
Однако указатель на void используется.
0
Jewbacabra
Эксперт PHP
3787 / 3124 / 1370
Регистрация: 24.04.2014
Сообщений: 9,503
02.09.2014, 23:44 3
Цитата Сообщение от S_el Посмотреть сообщение
О void переменных я не слышал ничего и подозреваю,что их не существует.
это конечно не void переменная, но приведение к void иногда встречается
C
1
2
3
4
int main(int argc, char* argv[]) {
    (void)argc; (void)argv;
    return 0;
}
1
S_el
2231 / 1698 / 354
Регистрация: 15.12.2013
Сообщений: 6,777
03.09.2014, 00:26 4
Jewbacabra, а когда оно используется?
0
Jewbacabra
Эксперт PHP
3787 / 3124 / 1370
Регистрация: 24.04.2014
Сообщений: 9,503
03.09.2014, 00:30 5
S_el, чтобы избежать сообщений компилятора о неиспользуемой переменной.
1
S_el
2231 / 1698 / 354
Регистрация: 15.12.2013
Сообщений: 6,777
03.09.2014, 00:37 6
Jewbacabra, но ведь такой подход затрудняет поиск ошибок.
0
Andrej
И целого heap'а мало
95 / 56 / 17
Регистрация: 31.07.2014
Сообщений: 291
03.09.2014, 00:46 7
Используется для отвязки от типа данных. К примеру, quick sort из стандартной библиотеки
C
1
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
принимает
1. указатель на начало массива элементов : void* base
2. количество элементов в массиве;
3. размер элемента; // так как тип void, то размер элемента в памяти неизвестен
4. функцию компаратор. // критерий сравнивания элементов
Плюсы: сожрёт всё, что кинешь: массив интов, флоатов, структур, ссылок на строки в куче. Лишь бы правильно компаратор написать.
Минусы: тяжело писать (попробуйте хотя-бы пузырёк таким образом реализовать), можно похреначить память если ошибиться с размерностями (типичные грабли сей).

upd: Аналог темплэйтов в крестах. То бишь, си могут и в генерик программинг, феллоус.
0
castorsky
1973 / 1076 / 87
Регистрация: 29.11.2013
Сообщений: 3,354
03.09.2014, 02:13 8
Цитата Сообщение от Praud Посмотреть сообщение
В каких случаях используется этот тип данных при объявлении переменных?
В таких:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdlib.h>
#include <errno.h>
 
void
catch_error(int local_errno)
{
    return;
}
 
void *
raise_get_mem(unsigned size)
{
    void * tmp_variable;
    
    if((tmp_variable = malloc(size)) == NULL) {
        int tmp_errno = errno;
        catch_error(errno);
        errno = tmp_errno;
        return NULL;
    }
    return tmp_variable;
}
 
int
main(int argc, char ** argv)
{
    int * int_ptr;
    double * dbl_ptr;
    
    int_ptr = raise_get_mem(sizeof(int) * 10);
    dbl_ptr = raise_get_mem(sizeof(double) * 10);
    
    free(int_ptr);
    free(dbl_ptr);
    
    exit(EXIT_SUCCESS);
}
Цитата Сообщение от Praud Посмотреть сообщение
А как он может быть полезен в переменных? ума не приложу.
Ну только как указатель на "безтиповые" данные. По этому указателю нельзя обратиться к данными без явного приведения в какому-либо типу. Пример см выше.
0
Evg
Эксперт CАвтор FAQ
19789 / 7429 / 560
Регистрация: 30.03.2009
Сообщений: 20,728
Записей в блоге: 30
04.09.2014, 00:06 9
Лучший ответ Сообщение было отмечено HighPredator как решение

Решение

Цитата Сообщение от Praud Посмотреть сообщение
В каких случаях используется этот тип данных при объявлении переменных?
Ни в каких. Сие запрещено языком и не имеет никакого смысла, поскольку переменная - это некий кусок памяти, а любые данные, хранящиеся в памяти, всегда имеют какой-то тип. В этом смысле ключевое слово void описывает не тип, а отсутствие типа
0
NikolayPC
0 / 0 / 1
Регистрация: 29.06.2014
Сообщений: 29
07.09.2014, 15:11 10
Кроме того что отсутствие типа, так и то, что применяя void при создании функции, нет необходимости в этой функции возвращать какое-либо значение.
0
07.09.2014, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 15:11

В каких случаях используется return 0?
Есть задача, но никак не могу понять для чего нужен &quot;return 0&quot; и каким образом можно вернуть...

Написать, в каких случаях не используется конструктор копирования
2)Написать, в каких случаях не используется конструктор копирования

В каких случаях при описании записи используется оператор варианта(case)
в каких случаях при описании записи используется оператор варианта(case)? в паскале


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru