Please, I am not asking a political question but a question about C.
And ours are *not* political answers
The way you asked the question have some sense when looking from an OOP point of view, but in reference to standard 'C' have no sense.
What is the status of the void pointer handed off to new as a parameter?
void *myCar = new(Car, model);
...
void *new(const void *_class, ...){
const struct Class* class = _class;
...
}
You are *not* passing a void pointer as parameter, but rather assigning to a void pointer the result of your function.
Moreover your function is declared as returning a pointer to void.
If your question is 'what is a void pointer type?' then we should better address you to review the basics of C/C++.
Anyway a void pointer is a variable that can hold the value of any type of pointer. You can assign to it pointers of int, float, double, structures, etc.
What you assign to it is assumed to be usefull to your program.
As a void pointer I would assume it was a declared pointer pointing to whatever rubbish the address space it occupied contained. But then what is the purpose of handing it a Car struct. Or does the actual passing of the name of the struct type (Car) actually generate a Car object/structure in memory and point the void pointer to it?
From basics to advanced usage
When programmers want to pass something without specifyng it's real nature generally pass a point to the describing structure hooded under a 'void pointer' type.
I.e. this is what Windows does passing handles, if look deep in win headers you'll see that 'HANDLE' is defined as 'LPVOID' alias 'void *'. The same assignement is shared with all specialized handles like 'HWND', 'HBITMAP', 'HOBJ', etc.
What is the benefit of this?
To pass different types of variables with the same declaration and to 'obscure' the real contents of the struct or variable. This on one side mimics the OOP languages objects handling, and on the other side protects private data from user.
In your specific case giving to the user only a void pointer you don't allow to user any access to Car structure internals protecting it from bad handling. The user only knows that he has to create a 'Car' object calling 'new' function, thet returns an handle to the new object (a void pointer!
).
Then you can use the object by means of function provided that works on that object.
Windows calls analyze the passed handles to discover which object they describe then calls the appropriate function to handle specific objects.
Look my sample here... Enough?