Hacker News new | past | comments | ask | show | jobs | submit login

What can you do with a void pointer without casting it, apart from comparing it to NULL?



You can (implicitly) convert it to another pointer type, e.g.

    int *buf = malloc(sizeof(*buf));
(It's noteworthy that while there's an implicit conversion above, there's no such thing as an implicit cast.)


This is a pretty well-regarded answer, with motivation for why you should not cast [1].

Of course it's not something everyone agrees to, but at least a lot of people seem to.

[1] https://stackoverflow.com/questions/605845/do-i-cast-the-res...


Interesting. Not casting a void pointer return value seems like a bit of a shibboleth for the "C is not a subset of C++" community.


A "better" shibboleth is using "new" and "old" as identifiers. It serves as a good barrier to avoid accidental C++ compilation.


Generic data structures work great if they use a void* since malloc returns a void*. Just malloc your structs, and suddenly a single set of 10 or so functions can work with all data types to build queues, lists, hash maps, etc


You can compare it for (in)equality to another void pointer.


You can assign it to any data pointer variable, and you can printf("%p") it, for example.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: