#include <stdlib.h>
typedef struct list {
int data;
struct list* next;
} list_element;
int push_front(list_element** head, int n)
{
list_element* tmp = (list_element*)malloc(sizeof(list_element));
tmp->data = n;
tmp->next = *head;
*head = tmp;
return 1;
}
int main()
{
list_element* first = NULL;
push_front(&first, 3);
push_front(&first, 4);
printf("\nfirst->data=%d", first->data);
printf("\n*first=%d", *first); //*first to 1 struktura , dlaczego wiec
printf("\n**first=%d", **first); // ta instukcja nie przenosi mnie do nastepnego adresu czyli pola ->next
return 0;
}
Zadawaj pytania w poście poza kodem. Komentarze to nie najlepsze miejsce.
*first to 1 struktura , dlaczego wiec ta instukcja nie przenosi mnie do nastepnego adresu czyli pola ->next
Od kiedy to wyłuskanie czegoś co nie jest wskaźnikiem przenosi gdziekolwiek? *first
nie jest wskaźnikiem, więc nie możesz wyłuskać, koniec historii.
mam pytanie, czym się różni (struct wezel* q)
q= (struct wezel*)malloc(sizeof(struct wezel));
vs
q =malloc(sizeof(struct wezel));
struct person *personPtr, person1;
personPtr = &person1;
(*personPtr).age //*personPtr to odwołanie się do miejsca na które wskazuje personPtr, no nie?
no to jak nie jest wskażnikiem przeiceż się odwołuje
void print(list_element** head)
{
printf("\t%d", (*head)->data);
print(&(*(*head)).next);//no tu tez mam ze jedna gwiazdka przenosi mnie do nastepnego adresu i....
potem ta 2 gwiazka przenosi mnie do 2 adresu kktory juz jest struktura w ktorej jest pole data i next
first
jest wskaźnikiem (z jedną gwiazdką)
list_element* first
*first
jest obiektem, na który wskazuje wskaźnik first
, więc *first
wskaźnikiem już nie jest i nie wolno wyłuskać, czyli robić **first
`head` jest wskaźnikiem na wskaźnik, czyli wskaźnikiem **z dwoma gwiazdkami** ```cpp list_element** head ``` `*head` jest tym, na co wskazuje `head`, czyli **wskaźnikiem z jedną gwiazdką** Dlatego możesz dalej wyłuskać i mieć `**head`
bartek164 napisał(a):
mam pytanie, czym się różni
(struct wezel* q)
q= (struct wezel*)malloc(sizeof(struct wezel));
vs
q =malloc(sizeof(struct wezel));
W C niczym, przy czym (struct wezel* q)
jest co najmniej dziwne, a na pewno zbędne.
W C++ trzeba rzutować to co zwraca malloc
by mieć zgodność typów, ale w C++ tak naprawdę nie powinieneś używać malloc
.
w końcu zrozumiałem wskażniki, brawo ja
(((*wsk_podwojny)).next).next ->piękne