Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di pongo
    Registrato dal
    Dec 2013
    Messaggi
    24

    puntatori come argomenti funzioni, analogia col passaggio per indirizzo[C++]

    Sto studiando il passaggio di argomenti a funzioni come puntatori e l'analogia col passaggio per indirizzo delle variabili, cosa c'è di errato in questo codice? La compilazione va a buon fine ma il run si blocca dopo aver stampato a video una sequenza numerica:

    codice:
    #include <iostream>
    
    using namespace std;
    
    void scambia1(int &a, int &b)
    {
        int appo;
        appo=a;
        a=b;
        b=appo;
    
        return;
    }
    
    void scambia2(int *a, int *b)
    {
        int appo;
        appo= *a;
        *a= *b;
        *b= appo;
    }
    
    int main()
    {
        int num1=5, num2=7;
        int *p1, *p2;
        p1=&num1;
        p2=&num2;
    
        cout<<num1;
        cout<<num2;
    
        scambia1(num1, num2);
        cout<<num1;
        cout<<num2;
    
        scambia2(*p1,*p2);
        cout<<num1;
        cout<<num2;
    
        return 0;
    }

  2. #2
    codice:
        scambia2(*p1,*p2);
    p1 e p2 sono già puntatori, non devi dereferenziarli per passarli a scambia2. Se fai così, dereferenzi i puntatori ottenendo i valori a cui puntano; per questi poi c'è un cast implicito a puntatori, per cui il risultato è che passi a scambia2 una coppia di puntatori non validi.
    Il codice corretto è
    codice:
        scambia2(p1,p2);
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di pongo
    Registrato dal
    Dec 2013
    Messaggi
    24
    Grazie per la risposta

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.