Konwersja wskaźnika przy malloc() w języku c
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Konwersja wskaźnika przy malloc() w języku c

AutorWiadomość
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

C/C++
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/
P-176143
» 2020-01-31 17:16:49
Nie rozumiem dlaczego po head w nawiasie jest ListElement_type* ?
A próbowałeś to usunąć?
P-176147
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.
P-176149
» 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.
P-176150
« 1 »
 Strona 1 z 1