PDA

Visualizza la versione completa : puntatori come argomenti funzioni, analogia col passaggio per indirizzo[C++]


pongo
07-03-2014, 12:13
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:




#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;
}

MItaly
08-03-2014, 02:00
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


scambia2(p1,p2);

pongo
24-03-2014, 11:15
Grazie per la risposta

Loading