wskazniki i struktury
Ostatnio zmodyfikowano 2015-03-21 18:41
Dizip Temat założony przez niniejszego użytkownika |
wskazniki i struktury » 2015-03-21 15:46:55 Proste pytanie: Czy te 2 kody są sobie równoznaczne ? Robie liste i myślę jak to inicjalizować. Wskaźniki dają szerokie pole by popełnić bład ;/ 1) struct list * wsk,*tmp,*head; wsk= ( struct list *) malloc(sizeof(struct list)); tmp=head=wsk; 2) struct list * wsk= ( struct list *) malloc(sizeof(struct list)); struct list * tmp = ( struct list *) malloc(sizeof(struct list)); struct list * head= ( struct list *) malloc(sizeof(struct list));
I ktorego powinienem uzyć? ogolnie wsk - aktualne wpisywanie danych tmp - zapisywanie polaczenia miedzy wyrazem i jego poprzednikiem head - poczatek |
|
Brunon3 |
» 2015-03-21 15:59:58 Rozumiem że to ma być w C?
Ja patrząc tak po projektach widziałem często zapis a'la (1). Sam nigdy tego nie stosowałem więc nie mogę się więcej wypowiedzieć.
-BD. |
|
Dizip Temat założony przez niniejszego użytkownika |
» 2015-03-21 17:54:15 Tak w C. Martwie się tylko czy takim zapsisem nie uciekam gdzieś poza pamięć |
|
Monika90 |
» 2015-03-21 17:58:34 W pierwszym przypadku wywołujesz malloc raz, a w drugim 3 razy, więc nie są równoważne. |
|
Lora |
» 2015-03-21 18:01:45 W pierwszym przypadku, wszystkie trzy wskaźniki wskazują na to samo miejsce w pamięci, a w drugim każdy wskaźnik wskazuje na inne miejsce. W tym pierwszym przypadku trzeba uważać, żeby nie zrobić czegoś takiego: wsk->wartosc = 5; free( wsk ); tmp->wartosc = 2;
|
|
Dizip Temat założony przez niniejszego użytkownika |
» 2015-03-21 18:25:45 Czyli tworząc taką 'mini liste' nie naruszam żadnej pamięci? Tzn czy nie wchodzę na obszary nie dla mnie. #include<stdio.h> #include<stdlib.h>
struct list { int liczba; struct list *nast; };
int main(void) { int i; struct list * wsk=0,*tmp=0,*head=0; for(i=0;i<5;i++) { if(wsk==NULL){ wsk= ( struct list *) malloc(sizeof(struct list)); scanf("%d",&wsk->liczba); tmp=head=wsk; } else { wsk= ( struct list *) malloc(sizeof(struct list)); scanf("%d",&wsk->liczba); tmp->nast=wsk; tmp=tmp->nast; } }
while( head ) { printf("%d ",head->liczba); head=head->nast; }
return 0; }
|
|
Lora |
» 2015-03-21 18:34:18 Po tej pętli for rób jeszcze coś takiego: Inaczej ta druga pętla nie będzie się kończyć. |
|
Dizip Temat założony przez niniejszego użytkownika |
» 2015-03-21 18:36:23 tzn po jej skończeniu czy jakoś przy obiegach? |
|
« 1 » 2 |