2013-05-20 5 views
0

Переменная Void не имеет ничего общего, а указатель void можно указывать только при кастинге. Таким образом, указатель void используется, когда мы на самом деле не знаем, где и какой тип данных мы хотим указать. Но что такое пустотная переменная?Каково практическое использование void datatype и void pointer?

Любой практический пример?

+0

Вы имеете в виду 'void v;'? Это не существует ни на одном языке. –

+0

Я думаю, что он больше связан с 'C', чем C# – Habib

ответ

1

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

Например, рассмотрите функцию void f(void);. Здесь ключевое слово void используется для обозначения отсутствия переданных и возвращаемых значений параметров.

Но void *ptr; отличается по своему значению.

Это объявляет указатель без указания того типа данных, на который он указывает.

0

Указатели void очень полезны для целей распределения памяти, когда у нас нет знаний о точном типе данных. Попытайтесь написать свой собственный malloc, чтобы почувствовать пустоту *.

или читать http://www.cplusplus.com/reference/cstdlib/malloc/

0

Не существует переменной void, как отмечает в своем комментарии Марко Топольник.

Void указатели используются в C/C++, чтобы указать на что-то неопределенное. Ключевое слово также используется (и на C# и других языках), чтобы отмечать методы, которые не возвращают значение. Так что я думаю, что вы думаете:

void method(); 

возвращается что-то типа void, что это не так. Он ничего не возвращает.

0

Они полезны в общем интерфейсе, таком как классический qsort.

void 
qsort(void *base, size_t nel, size_t width, 
    int (*compar)(const void *, const void *)); 

http://www.manpagez.com/man/3/qsort/

void возвращаемый тип идентифицирует это как процедуры, а не функции, потому что она не возвращает данные на всех (любого типа). void * s может указывать на что-либо вообще, но функция compar должна использовать их соответствующим образом, чтобы использовать их.

1

Нет переменной void, но есть указатели на пустоты. Как многие другие упоминали, я хотел бы напомнить вам о типе cast перед использованием указателей void.

float generic_add(void *n1, void *n2){ 
    return *((int *) n1) + *((float *) n2); 
} 
Смежные вопросы