Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    passaggio di parametri in C

    Ciao, ho scritto questo semplice programma per cercare di capire come utilizzare nelle funzioni gli indirizzi delle variabili per poterle modificare automaticamente, solo che non gira e non riesco a capire quale errore ho fatto.
    Potete darmi una mano?
    Grazie.


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

    struct nodo
    {int vertice;
    struct nodo *next;
    };



    modifica(struct nodo *l);


    main()
    {struct nodo *puntatore;
    struct nodo *primo_elemento;
    puntatore = (struct nodo *)malloc(sizeof(struct nodo));
    puntatore->vertice = 1;
    primo_elemento = puntatore;
    puntatore->next=(struct nodo *)malloc(sizeof(struct nodo));
    puntatore=puntatore->next;
    puntatore->vertice = 2;
    puntatore->next=(struct nodo *)malloc(sizeof(struct nodo));
    puntatore=puntatore->next;
    puntatore->vertice =3;
    puntatore->next = NULL;
    printf("Il primo nodo è: %d\n",primo_elemento->vertice);
    modifica(&primo_elemento);
    printf("Adesso è: %d",primo_elemento->vertice);
    }


    modifica(struct nodo *l)
    {struct nodo *temp;
    temp = &l;
    *temp->vertice = 4;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Deve essere, nel main

    codice:
    modifica(primo_elemento);
    e la funzione modifica, semplicemente

    codice:
    void modifica(struct nodo *l)
    {
       l->vertice = 4;
    }

  3. #3
    Utente di HTML.it L'avatar di eclips
    Registrato dal
    Apr 2005
    Messaggi
    48
    il tuo codice dovrebbe funzionare in questo modo:

    codice:
    modifica(struct nodo **l)/*qui serve il doppio puntatore dato che hai passato il 'primo_elemento' (che è un di tipo puntatore) per indirizzo*/
    
    {
       struct nodo *temp;
       temp = *l;
       *temp->vertice = 4;
    }
    saluti

  4. #4

    Sempre sul passaggio di parametri nelle funzioni

    Mettendo le modifiche suggerite da Eclipse e compilando il programma mi da errore :"invalid type argument of unary * "
    Mentre con le modifiche suggerite da Oregon il programma funziona... adesso la mia domanda è: io avevo fatto questo programmino per poi lavorare su uno più complesso, in cui devo creare dinamicamente i nodi in una funzione e modificarli in un'altra.
    Avendo messo "primo_nodo" come variabile globale, posso modificare tutti gli elementi che sono al suo interno chiamando le funzioni come fatto nel programmino?
    Grazie per l'aiuto... davvero!

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Puoi tranquillamente utilizzare le stesse funzioni che hai usato ora, in quanto se ti serve modificare un nodo, ad esempio il terzo, farai
    codice:
    modificaNodo(NodoPrincipale.NextNodo->NextNodo);
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di eclips
    Registrato dal
    Apr 2005
    Messaggi
    48

    Re: Sempre sul passaggio di parametri nelle funzioni

    Originariamente inviato da Tempestaxmen
    Mettendo le modifiche suggerite da Eclipse e compilando il programma mi da errore :"invalid type argument of unary * "
    si hai ragione, scusa, non avendo provato il programma non mi ero accorto dell'errore
    " * temp->vertice = 4; "che equivale a: "*(*temp).vertice" ed è per questo che ti dava l'errore "invalid type argument of unary * ".
    la funzione doveva essere in questo modo :
    codice:
    void modifica(struct nodo **l)
    {
      struct nodo *temp;
      temp = *l;
      temp->vertice = 4;
    }
    ciao

  7. #7

    Modifica di variabili all'interno di funzioni

    Scusate se rompo ancora le scatole su 'sta roba...
    nel programma che devo fare io in pratica devo andare a modificare dinamicamente delle informazioni.
    Ho una struttura del tipo:

    struct lista
    {int vertice;
    struct lista *next;
    };

    struct nodo
    {int nome_nodo;
    int stato_nodo;
    int num_vicini_liberi;
    struct lista *nodi_vicini;
    int insieme_appartenenza;
    struct lista *nodi_in_insieme;
    struct nodo *next;
    };

    e ho delle funzioni che sono: struct nodo *trova_nodo(int m); e aggiungi_nodo(int j, int i);

    usandole in questo modo:
    struct nodo *trova_nodo(int m) //trova il nodo all'inteno della lista dei nodi
    {struct nodo *temp;
    temp = primo_nodo;
    if(temp->nome_nodo != m)
    temp = temp->next;
    else
    return temp;
    }

    aggiungi_nodo(int j, int i)
    {struct lista *temp;
    struct nodo *temp1;
    temp1 = trova_nodo(j);
    temp = (struct lista *)malloc(sizeof(struct lista));
    temp->vertice = i;
    temp->next = temp1->nodi_in_insieme;
    temp1->nodi_in_insieme = temp;
    }

    dove per "j" ho passato (da un'altra funzione) nodo1->nome_nodo
    e per "i" ho passato nodo2->nome_nodo

    volevo sapere: in questo modo, all'uscita della funzione "aggiungi_nodo" permane la modifica fatta nel nodo1, ovvero l'aggiunta del nome del secondo nodo nella lista??

    Grazie mille, fino ad ora siete stati preziosissimi

    P.S. la variabile "primo_nodo" usata nella funzione "trova_nodo" è una variabile globale

  8. #8
    Non sappiamo come aiutarti.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Tempestaxmen
    Scusate se rompo ancora le scatole su 'sta roba...
    Ho unito le discussioni visto che si tratta sempre dello stesso problema.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.