Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    24

    [C++] Return di due valori.. è possibile?

    Salve,
    volevo sapere se esiste un modo affinchè una funzione ritorni 2 valori e non uno solo. In particolare mi deve ritornare al main un intero ed un puntatore ad un'area di memoria.
    L'unico modo che mi è venuto in mente è costruire una struttura dove dichiaro il puntatore al buffer e l'intero e quindi ritorno un puntatore alla struttura.
    Se ci sono altri metodi, fatemeli sapoere..
    Ciao e grazie.

  2. #2
    Puoi passare i parametri per riferimento o tramite un puntatore. Siccome mi si era bloccato il PC mentre postavo, sarò un po' più conciso e vado subito agli esempi.

    N.B.: volendo magari puoi anche far restituire un solo parametro e passare tutti gli altri per riferimento, ma questo metodo forse è più comprensibile. Per quanto riguarda i parametri puntatori, in C devi usarli per forza, ma dato che in C++ ci sono i riferimenti (che ti evitano tutti quegli asterischi) ... perché non usarli?

    Vado subito al tuo problema, sia con i puntatori che con i riferimenti:

    codice:
    void conPuntatori( int*, int** );
    void conRiferimenti( int&, int*& );
    
    void main()
    {
        int a;
        int* b;
    
        ...
    
        conPuntatori( &a, &b ); // nota: '&' significa 'indirizzo di'
        conRiferimenti( a, b );
    
        cout << a << endl; // stampa 1000
        cout << b << endl; // stampa 65535 (=0x0000FFFF)
    }
    
    void conPuntatori( int* intero, int** puntatore )
    {
        *intero = 1000;
        *puntatore = ( int* ) 0x0000FFFF; // un indirizzo *a caso* :p
    }
    
    void conRiferimenti( int& intero, int*& puntatore ) // nota: '&' indica la dichiarazione di un riferimento (in inglese reference)
    {
        intero = 1000;
        puntatore = ( int* ) 0x0000FFFF;
    }
    In poche parole, per ogni parametro passato per riferimento ogni modifica effettuata sui parametri formali si riflette su quelli attuali.

    Ciao.

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.