Visualizzazione dei risultati da 1 a 10 su 18

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ho alterato leggermente il tuo codice:

    codice:
    using namespace std;
    #include <iostream>
    void cambia(int m, int n[7]){
        cout << "Indirizzo n ad inizio chiamata cambia(): "<<n<<endl;
        //for(int i=0;i<7;i++) cout << "n["<<i<<"]: " << n[i] <<endl; 
            (*(n+m))--;
            m++;
            cout << "Indirizzo n dopo (*(n+m))--: " << n<<endl;
            n--;
        cout << "Indirizzo n termine funzione: "<<n<<endl;
    }
    
    
    int main(){
        int vet[] ={4,2,3,2,4};
        cout << "Indirizzo originale vet: " << vet << endl;
        cambia(vet[4], vet-1);
        cout << "Indirizzo vet dopo cambia(vet[4], vet-1): "<<vet<<endl<<endl;
        cambia(0,&vet[4]);
        cout << "Indirizzo vet dopo cambia(0, &vet[4]): "<<vet<<endl;
        int i=0;
        
        for(i=0; i<5; i++)
            cout << vet[i];
        return 0;
        
    }

    Io ottengo:
    codice:
    Indirizzo originale vet: 0x28fef8
    Indirizzo n ad inizio chiamata cambia(): 0x28fef4
    Indirizzo n dopo (*(n+m))--: 0x28fef4
    Indirizzo n termine funzione: 0x28fef0
    Indirizzo vet dopo cambia(vet[4], vet-1): 0x28fef8
    
    Indirizzo n ad inizio chiamata cambia(): 0x28ff08
    Indirizzo n dopo (*(n+m))--: 0x28ff08
    Indirizzo n termine funzione: 0x28ff04
    Indirizzo vet dopo cambia(0, &vet[4]): 0x28fef8
    42313
    Quindi fai caso a:
    codice:
    Indirizzo n ad inizio chiamata cambia(): 0x28fef4
    Indirizzo n dopo (*(n+m))--: 0x28fef4
    è sempre il solito di inizio funzione, prima dell'esecuzione di quell'istruzione. Cambia solo dopo con l'ultima sottrazione: Indirizzo n termine funzione: 0x28fef0
    Ma quando ritorna al chiamante, vet ha sempre l'indirizzo originale, questo voglio dire! Questo vale per entrambe le chiamate, come si nota.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    48
    Quote Originariamente inviata da Patrick Jane Visualizza il messaggio
    Quindi fai caso a:
    codice:
    Indirizzo n ad inizio chiamata cambia(): 0x28fef4
    Indirizzo n dopo (*(n+m))--: 0x28fef4
    è sempre il solito di inizio funzione, prima dell'esecuzione di quell'istruzione. Cambia solo dopo con l'ultima sottrazione: Indirizzo n termine funzione: 0x28fef0
    Ma quando ritorna al chiamante, vet ha sempre l'indirizzo originale, questo voglio dire! Questo vale per entrambe le chiamate, come si nota.
    Tutto chiaro. Grazie mille!
    BoG

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.