Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C]Liste con procedure

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    un puntatore contiene un indirizzo di memoria , un puntatore usato come parametro di una funzione contiene UNA COPIA dell'indirizzo passato alla funzione , quindi si può cambiare il contenuto puntato dall'indirizzo , ma essendo una copia non puoi cambiare il puntatore nel main , che continuerà a contenere lo stesso indirizzo .

    dovresti modificare la funzione , facendo restituire il puntatore , e approfondire il concetto che ti ho spiegato , tieni presente che quando passi un puntatore a una funzione , passi una copia di un indirizzo .

    prototipo :
    punt crea_lista(punt P1,punt P0,int N);

    nel main :
    P1=crea_lista(P1,P0,N);
    codice:
    punt crea_lista(punt P1,punt P0,int N)    {
                int I, cont=0;
                for (I=0;I<N;I++)
                {        
                        P1=(vagone*)malloc(sizeof(vagone));
                        printf("Inserisci valore: ");
                        scanf("%d",&(P1->ele));
                        if (cont==0)
                        {
                                P1->punt=NULL;
                                cont=cont+1;
                        }
                        else
                        P1->punt=P0;
                        P0=P1;
                        system("PAUSE");
                        printf("%d\n",P1->punt);
                        
                }
                return P1;
    Tecnologia

  2. #2

    ottima risposta

    Quote Originariamente inviata da torn24 Visualizza il messaggio
    un puntatore contiene un indirizzo di memoria , un puntatore usato come parametro di una funzione contiene UNA COPIA dell'indirizzo passato alla funzione , quindi si può cambiare il contenuto puntato dall'indirizzo , ma essendo una copia non puoi cambiare il puntatore nel main , che continuerà a contenere lo stesso indirizzo .

    dovresti modificare la funzione , facendo restituire il puntatore , e approfondire il concetto che ti ho spiegato , tieni presente che quando passi un puntatore a una funzione , passi una copia di un indirizzo .

    prototipo :
    punt crea_lista(punt P1,punt P0,int N);

    nel main :
    P1=crea_lista(P1,P0,N);
    codice:
    punt crea_lista(punt P1,punt P0,int N)    {
                int I, cont=0;
                for (I=0;I<N;I++)
                {        
                        P1=(vagone*)malloc(sizeof(vagone));
                        printf("Inserisci valore: ");
                        scanf("%d",&(P1->ele));
                        if (cont==0)
                        {
                                P1->punt=NULL;
                                cont=cont+1;
                        }
                        else
                        P1->punt=P0;
                        P0=P1;
                        system("PAUSE");
                        printf("%d\n",P1->punt);
                        
                }
                return P1;
    In pratica ritorno P1 che punta all' ultima lista.. davvero un ottima soluzione :3
    Ti ringrazio mi hai risolto il problema
    Ma mi rimane un dubbio: Quando ritorno P1, nel main avrò l' indirizzo dell' ultima lista...
    Ma quando termina la funzione, tutte le strutture create all' interno non vengono eliminate?..
    Grazie anche a Marco1995.. i printf inutili erano stati messi da me per aiutarmi durante il debug a capire dov'era il problema e per quanto riguarda l' if.. non me n' ero proprio accorto Grazie!
    Ultima modifica di BL3CKD34TH; 28-12-2013 a 16:51

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.