Brak zapamiętania adresu przez wskaźnik

0

Dzień Dobry,

Nie wiem czemu, gdy gdy dodaję element do listy, to wskaźnik po wyjściu z funkcji addToEnd zostaje nie zmieniony.

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

typedef struct Node Node;

struct Node
{
    int wartosc;
    Node *next;
    Node *prev;
};

void addToEnd(Node *head, Node *tail, const int *liczba)
{
Node *tmp = (Node*) malloc(sizeof(Node));
tmp->wartosc = *liczba;
tmp->next = NULL;
tmp->prev = NULL;

    if(head == NULL)
    {
        printf("baba \n");
        printf("head = %d", head);
        head = tmp;
        printf("head = %d\n", head);
        tail = tmp;
        head->next = tail;
        tail->prev = head;
    }
    else
    {
        printf("jaga \n");
        tmp->prev = tail;
        tail->next = tmp;
    }
}

int main()
{
Node *head = NULL;
Node *tail = NULL;

int t = 4;
int wartosc;

    while (t--)
    {
        scanf("%d", &wartosc);
        addToEnd(head, tail, &wartosc);
    }
    printf(" head = %d\n", head->wartosc);
    printf(" tail = %d\n", tail->wartosc);
    return 0;
}
0

No bo taka jest zasada wywoływania funkcji:

#include <stdio.h>

void fun(int x) { x=1000; }

int main()
  {
   int p=1;
   printf("%d\n",p);
   fun(p);
   printf("%d\n",p); // p nadal jest 1, zmieniona została tylko kopia
   return 0;
  }
0

Tak, wysyłan wskaźnik i odbieram wskaźnik

void addToEnd(Node *head, Node *tail, const int *liczba) //przecież znajduję się gwiazda

dodanie znacznika <code class="c"> - fp

0

Nawet gdy parametrem funkcji jest wskaźnik? W takim wypadku jak to powinno się rozwiązać? Poprzez adres, &?

0
#include <stdio.h>

int V=666,W=13;

void fun(int *p) { p=&W; }
void funOK(int **p) { *p=&W; }
 
int main()
  {
   int *p=&V;
   printf("%d\n",*p);
   fun(p);
   printf("%d\n",*p); // p nadal jest wskazuje na V, zmieniona została tylko kopia
   funOK(&p);
   printf("%d\n",*p); // p zostało zmienione bo przekazane przez wskaźnik
   return 0;
  }
0

Przekazując coś przez wskaźnik możesz zmienić wartość tego na co wskaźnik pokazuje i nic więcej. Nie możesz zmienić obiektu który wskaźnik wskazuje na inny, możesz zmienić tylko stan tego na co pokazuje.

0

Dziękuję bardzo za klarowne wyjaśnienie

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