• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazywanie adresu

Object Storage Arubacloud
0 głosów
208 wizyt
pytanie zadane 24 kwietnia 2017 w C i C++ przez AndekQR Użytkownik (880 p.)

Witam 

Zamieszczam kod mojego programu.

#include <stdio.h>
#include <stdlib.h>

struct kolejka
{
    int data;
    struct kolejka *next;
};

struct wsk
{
    struct kolejka *top;
    struct kolejka *tail;
}fifo;

void add(struct wsk *fifo, int x)
{
    struct kolejka *nowy = (struct kolejka*)malloc(sizeof(struct kolejka));

    if(fifo->top==NULL)
    {
        nowy->data=x;
        fifo->top=nowy;
        fifo->tail=nowy;
    }
    else
    {
        nowy->data=x;
        nowy->next=NULL;
        fifo->tail->next=nowy;
    }
}

void del(struct wsk *fifo)
{
    if(fifo->top==NULL)
        printf("kolejka jest pusta");
    else
    {
        struct kolejka *point = fifo->top;
        printf("%d", point->data);
        fifo->top=point->next;
        free(point);
    }


}

int main()
{
    add(&fifo, 2);
    del(&fifo);
    return 0;
}

 

Dlaczego argumentem do funkcji musi być adres na strukturę? W innym przypadku program nie działa.

Z góry dziękuje za pomoc!

2 odpowiedzi

0 głosów
odpowiedź 24 kwietnia 2017 przez unknown Nałogowiec (39,560 p.)
wybrane 24 kwietnia 2017 przez AndekQR
 
Najlepsza
Żeby działać na oryginalnej strukturze a nie jej kopii.
komentarz 24 kwietnia 2017 przez AndekQR Użytkownik (880 p.)
Mógłbyś wyjaśnić jeszcze kiedy stosuje się podwójny wskaźnik w parametrach funkcji. Ponieważ gdy przekazywałem adres do funkcji zawsze stosowałem podwójny wskaźnik jako parametr.
komentarz 24 kwietnia 2017 przez unknown Nałogowiec (39,560 p.)

Wskaźnik na wskaźnik używa się gdy funkcja potrzebuje oryginalnego wskaźnika. 

Ponieważ gdy przekazywałem adres do funkcji zawsze stosowałem podwójny wskaźnik jako parametr.

Hmm, z tego co napisałeś, wystarczyłoby użyć po prostu wskaźnika(ale bez zobaczenia jakiegoś kawałku kodu nie jest pewien) 

0 głosów
odpowiedź 24 kwietnia 2017 przez redie Obywatel (1,490 p.)
Może dlatego, że w funkcjach add i del masz w argmencie struct wsk *fifo. A jedyną możliwą opcją, żeby funkcja dostała to co chce jest więc przekazanie tego przez referencję :)
komentarz 24 kwietnia 2017 przez unknown Nałogowiec (39,560 p.)
W C nie ma referencji
komentarz 24 kwietnia 2017 przez redie Obywatel (1,490 p.)
Sorki, nie siedzę w C

Podobne pytania

0 głosów
2 odpowiedzi 99 wizyt
pytanie zadane 25 stycznia 2020 w C i C++ przez kolijk Użytkownik (600 p.)
0 głosów
2 odpowiedzi 402 wizyt
pytanie zadane 29 stycznia 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
0 głosów
2 odpowiedzi 193 wizyt

92,615 zapytań

141,465 odpowiedzi

319,776 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...