Пустой указатель — это указатель, с которым не связан тип данных. Пустой указатель может содержать адрес любого типа и может быть напечатан для любого типа.
|
Преимущества пустых указателей:
1) malloc () и calloc () возвращают тип void *, и это позволяет использовать эти функции для выделения памяти любого типа данных (только из-за void *)
|
Обратите внимание, что вышеуказанная программа компилируется в C, но не компилируется в C ++. В C ++ мы должны явно вернуть тип malloc в (int *).
2) указатели void в C используются для реализации обобщенных функций в C. Например, функция сравнения, которая используется в qsort () .
Некоторые интересные факты:
1) указатели void не могут быть разыменованы. Например, следующая программа не компилируется.
|
Выход:
Compiler Error: 'void*' is not a pointer-to-object type
Следующая программа компилируется и работает нормально.
|
Выход:
10
2) Стандарт C не допускает арифметику указателей с пустыми указателями. Однако в GNU C это допускается с учетом того, что размер void равен 1. Например, следующая программа компилируется и нормально работает в gcc.
|
Выход:
2
Обратите внимание, что вышеуказанная программа может не работать в других компиляторах.
Ссылки:
http://stackoverflow.com/questions/20967868/should-the-compiler-warn-on-pointer-arithmetic-with-a-void-pointer
http://stackoverflow.com/questions/692564/concept-of-void-pointer-in-c-programming
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Чем void * отличается в C и C ++?
- Двойной указатель (указатель на указатель) в C
- Возврат из пустых функций в C ++
- Висячие, пустые, нулевые и дикие указатели
- Что такое указатель на нулевой указатель
- Можно ли писать «void main ()» или «main ()» на C / C ++?
- Разница между int main () и int main (void) в C / C ++?
- указатель 'this' в C ++
- C ++ | этот указатель | Вопрос 5
- C ++ | этот указатель | Вопрос 4
- Указатель на массив | Array Pointer
- C ++ | этот указатель | Вопрос 3
- C ++ | этот указатель | вопрос 2
- C ++ | этот указатель | Вопрос 1
- Пустой указатель на C
0.00 (0%) 0 votes