Leerzeiger: Unterschied zwischen C und C ++
Ich versuche, die Unterschiede zwischen C und C ++ in Bezug auf leere Zeiger zu verstehen. Die folgenden Kompilierungen in C, aber nicht in C ++ (alle Kompilierungen erfolgen mit gcc / g ++ -ansi -pedantic -Wall):
int* p = malloc(sizeof(int));
weilmalloc
kehrt zurückvoid*
, denen C ++ nicht zuordnen darfint*
während C das erlaubt.
Hier jedoch:
void foo(void* vptr)
{
}
int main()
{
int* p = (int*) malloc(sizeof(int));
foo(p);
return 0;
}
Sowohl C ++ als auch C kompilieren es ohne Beschwerden. Warum?
K & R2 sagen:
Jeder Zeiger auf ein Objekt kann in Typ konvertiert werdenvoid *
ohne Informationsverlust. Wenn das Ergebnis wieder in den ursprünglichen Zeigertyp konvertiert wird, wird der ursprüngliche Zeiger wiederhergestellt.
Und das sind alles hübsche Summenvoid*
Konvertierungen in C. Was schreibt der C ++ - Standard vor?