By itself it means absolutely nothing. In 16-bit compilers such as Turbo C it is sometimes necessary to hardcode memory addresses, such as the screen on MS-DOS is located at 0x8000 (or something like that). So it might be necessary to cast a pointer to that address char* screen = (void*)0x8000; Such addresses is not possible with 32 and 64 bit compilers.
void is a special type which is like a place holder for any type. void pointers are used as a kind of "incomplete cast" which allows you to store values without first specifying its type, but you must later specify its type by casting before using a void pointer. void pointers almost always point to something, and since they are just pointers, a pointer is usually the size of int. In some advanced cases, a void pointer is used as a temporary integer.
(void *) <-- that is a void pointer
(void *)2 <-- that is a void pointer to address 0x00000002
(void)2 <-- Error, cannot cast to a typeless type
(void *)&A <-- This is how you convert the int pointer into a pointer of any other type
(void *)A; <-- This will point to the memory pointed to by the VALUE of int A.
So yeah, that's how you would use it. It might help if you give specific examples of (void *)2.
((void *)0) is a special "command" that the C compiler looks for. Its completely different than ((void *)2) or anything else because the C compiler specifically will look for the ((void *)0) combination and does something special with it.
What it does is it looks at the context in which it's used, and then try's to create a pointer which points to something completely invalid for that context, which is usually memory position 0, but it could be something else, totally depends.
This is called a "null pointer". In the C standard library you might encounter a macro used quite often named NULL. If you look at its definition, its defined as ((void *)0). The null pointer will always be unique from any possible other pointer, even if there is a valid pointer to 0, in which case the compiler turns ((void *)0) into something crazy like 0xFFFFFFFF. Depends completely on what your context is.
If you want more information on null pointers, check this out:
For Each ctrl As Control In Me.Controls("pnlMainPanel").Controls
If ctrl.GetType Is GetType(System.Windows.Forms.Panel) Then
For Each subCtrl As Control In ctrl.Controls
If subCtrl.GetType Is GetType(System.Windows.Forms.TextBox) Then
If subCtrl.GetType Is ...