Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

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

Ostatnio zmodyfikowano 2020-01-31 18:14
Autor Wiadomość
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

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