#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;
}
Wskażniki do struktur
- Rejestracja: dni
- Ostatnio: dni
- Postów: 534
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 534
mam pytanie, czym się różni (struct wezel* q) q= (struct wezel*)malloc(sizeof(struct wezel)); vs
q =malloc(sizeof(struct wezel));
- Rejestracja: dni
- Ostatnio: dni
- Postów: 534
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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
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`
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2500
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.