On 26 Oct 2002 at 21:17, Simone Saravalli wrote:
> Ancora una volta ho dei problemi con le mie liste. Questa volta il
> problema è che dopo aver definito un nodo nella initSeq (è solo una
> prova, lo so che come esercizio è stupido) vorrei passare la mia
> mini-lista alla funzione show per visualizzare il valore contenuto in
> (s.scan)->dato, ma non ci riesco, in quanto la printf contenuta nella
> funzione initSeq, mostra il valore corretto (0, in questo caso), ma la
> funzione show mi dà un valore a caso. So che il problema risiede nel
> fatto che non passo il parametro alle due funzioni per riferimento,
> bensì per valore, ma avrei bisogno che qualcuno mi indicasse come si fa,
bravo...
> cosa sbaglio insomma. Scusate e sopportatemi 8-)
> Simone Saravalli
>
>
> #include <stdio.h>
> #include <stdlib.h>
>
> #define TRUE 1
> #define FALSE 0
>
> typedef int elem;
>
> typedef struct node {
> elem dato;
> struct node *next;
> } item;
>
> typedef item *noderef;
>
> typedef struct record_scans {
> char mode;
> noderef ptr;
> noderef scan;
> } sequence;
>
> void initSequence (sequence s, char modo) {
oooops qui hai una bella copia locale di una sequence
> s.mode=modo;
> if (s.mode=='R') {
> (s.ptr)=malloc(sizeof(struct node));
> (s.ptr)->next=NULL;
> (s.ptr)->dato=0;
qui assegni alla copia locale
> s.scan=s.ptr;
> }
> printf ("%d ", (s.scan)->dato); //qui il valore viene stampato
qui stampi il valore assegnato alla copia locale
> correttamente
> }
qui la copia locale finisce di esistere con le sue assegnazioni.
> void show (sequence s) {
> printf ("%d ", (s.scan)->dato); //qui no, perchèèèè?
> }
>
> main() {
> sequence inSeq;
> initSequence (inSeq, 'R');
> show (inSeq);
qui cerchi di stampare una sequence che in realtà NON è mai stata
init(iata)... quella che è stata init(iata) è quella instanziata nella
dichiarazione della funzione proprio nella riga
> void initSequence (sequence s, char modo) {
P.S. e meno male che funziona così...
> return 0;
> }
--
Salve
Ivan Sergio Borgonovo
http://www.webthatworks.it/
uniq life || sleep 24h
|