Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44

    [c] allocazione dinamica vettore

    ciao a tutti, devo risolvere il seguente problema:

    ho una struttura dati costituita da un vettore, che chiamerò archivio, e che ha dimensione n (il numero n viene scelto dall'utente all'inizio del programma). Il vettore è allocato dinamicamente dopo aver chiesto all'utente il valore n.
    Adesso devo creare una funzione che allochi il vettore archivio, dato il numero n.

    la struct è questa:
    codice:
    typedef struct { 
                  unsigned int posti_disponibili; 
                  list posti_acquistati; //è una lista
                  list posti_prenotati; // è una lista 
    }archivio;
    archivio *archivio_voli;
    nell'esempio già svolto questa funzione è scritta così:
    codice:
    void AllocaVettore(archivio **x, unsigned int n){
         *x=(archivio *)malloc(n*sizeof(archivio));
    }
    qualcuno mi aiuta a capire perchè gli passa il doppio puntatore?

  2. #2
    il discorso è abbastanza complesso a parole, ma è logico una volta compreso. In pratica, tu passi dei parametri alla funzione. Questi sono detti formali, vengono passati alla funzione come valori, non sono modificabili. Quando vuoi che un parametro passato a una funzione possa anche essere modificato all' interno della funzione stessa, devi passare un puntatore del parametro. agendo sul puntatore, coè sull' indirizzo di memoria bersaglio, puoi modificare i valori di una variabile "globale" all' interno di una funzione "locale". Ora, tu vuoi cambiare una variabile che già di per sè è un puntatore, come la passi alla funzione allora? Ne passi un puntatore! Ecco perchè si arriva a puntatore di puntatore scommetto che non ti è del tutto chiaro giusto?:P

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    44
    Originariamente inviato da celtico94
    il discorso è abbastanza complesso a parole, ma è logico una volta compreso. In pratica, tu passi dei parametri alla funzione. Questi sono detti formali, vengono passati alla funzione come valori, non sono modificabili. Quando vuoi che un parametro passato a una funzione possa anche essere modificato all' interno della funzione stessa, devi passare un puntatore del parametro. agendo sul puntatore, coè sull' indirizzo di memoria bersaglio, puoi modificare i valori di una variabile "globale" all' interno di una funzione "locale". Ora, tu vuoi cambiare una variabile che già di per sè è un puntatore, come la passi alla funzione allora? Ne passi un puntatore! Ecco perchè si arriva a puntatore di puntatore scommetto che non ti è del tutto chiaro giusto?:P
    grazie adesso è più chiaro

  4. #4
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    In pratica ogni volta che chiami una funzione e passi delle variabili come parametri, quelle variabili vengono copiate, per cui assegnandole agisci solo sulle copie delle variabili originali.

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.