Konwersja wskaźnika przy malloc() w języku c
Ostatnio zmodyfikowano 2020-01-31 18:14
Pawełek Temat założony przez niniejszego użytkownika |
Konwersja wskaźnika przy malloc() w języku c » 2020-01-31 15:20:57 Uczę się pisać listę jednokierunkową w języku c nie mogę zrozumieć tego fragmentu ListElement_type * head; head =( ListElement_type * ) malloc( sizeof( ListElement_type ) ); head = NULL; Nie rozumiem dlaczego po head w nawiasie jest ListElement_type* ? nie może być po prostu head = malloc( sizeof( ListElement_type ) ) ? Fragment kodu wzięty jest z tego poradnika: https://binarnie.pl/lista-jednokierunkowa/ |
|
pekfos |
» 2020-01-31 17:16:49 Nie rozumiem dlaczego po head w nawiasie jest ListElement_type* ? |
A próbowałeś to usunąć? |
|
Pawełek Temat założony przez niniejszego użytkownika |
» 2020-01-31 17:56:04 Usunąłem, kod działa bez tego, no ale dalej nie rozumiem dlaczego tam to jest. |
|
pekfos |
» 2020-01-31 18:14:33 A, mówimy o C. Kompilator C sam sobie skonwertuje void* na cokolwiek*, więc to nie jest do niczego potrzebne. Ten zapis, lub inne rzutowanie jest konieczne w C++, gdzie nie ma niejawnej konwersji z void*, a tam i tak lepiej używać new. Jeśli z jakiegoś powodu chcesz mieć zgodność z C i C++ (plik nagłówkowy na przykład), to wtedy jest sens to tak napisać. Albo jak chcesz jawnie określić typ, żeby kompilator miał szanse wykryć niezgodność, zamiast po cichu samemu skonwertować. Ten argument działa w obie strony i w przypadku gdy nie dołączysz <stdlib.h>, niejawnie zadeklarowane malloc() będzie zwracać int i rzutowanie ukryje tego buga. |
|
« 1 » |