Wskażniki do struktur

0
#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;
}

1

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.

0

mam pytanie, czym się różni (struct wezel* q) q= (struct wezel*)malloc(sizeof(struct wezel)); vs
q =malloc(sizeof(struct wezel));

0
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

1

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`
0
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.

0

w końcu zrozumiałem wskażniki, brawo ja
(((*wsk_podwojny)).next).next ->piękne

1 użytkowników online, w tym zalogowanych: 0, gości: 1