PDA

View Full Version : [C] Problema con i puntatori [NOOB]


Vash88
14-01-2008, 09:24
devo leggere 3 interi e metterli in memoria heap con 3 puntatori P1, P2, P3.
Poi tramite procedura fare in modo che P1 punti alla cella precedentemente indirizzata da P2, P2 punti alla cella precedentemente indirizzata da P3 e P3 punti alla cella precedentemente indirizzata da P1.

il mio tentativo è atroce perchè non ci ho capito niente :(

#include <stdio.h>
#include <stdlib.h>
void scambia3(int*,int*,int*);
int main(void)
{
int X, Y, Z;
int*P1,*P2,*P3;

P1=(int*)malloc(sizeof(int)); P2=(int*)malloc(sizeof(int)); P3=(int*)malloc(sizeof(int));
printf("inserire X, Y e Z");
scanf("%d%d%d",&X,&Y,&Z);
scambia3(P1,P2,P3);
printf("i valori scambiati di X, Y e Z sono %d %d %d",*P1 ,*P2, *P3);
system("PAUSE");
}
void scambia3(int*P1,int*P2,int*P3)
{
int Ptemp;
Ptemp=*P1;
*P1=*P2;
*P2=*P3;
*P3=Ptemp;
}

Vash88
14-01-2008, 10:31
#include <stdio.h>
#include <stdlib.h>
void scambia3(int*,int*,int*);
int main(void)
{
int X, Y, Z;
int*P1,*P2,*P3;

printf("inserire X, Y e Z");
scanf("%d%d%d",&X,&Y,&Z);
P1=(int*)malloc(sizeof(int)); P2=(int*)malloc(sizeof(int)); P3=(int*)malloc(sizeof(int));
*P1=X; *P2=Y; *P3=Z;
scambia3(P1,P2,P3);
printf("i valori scambiati di X, Y e Z sono %d %d %d",*P1 ,*P2, *P3);
system("PAUSE");
}
void scambia3(int*P1,int*P2,int*P3)
{
int Ptemp;
Ptemp=*P1;
*P1=*P2;
*P2=*P3;
*P3=Ptemp;
}

Risolto :stordita: :doh:

banryu79
14-01-2008, 12:33
Così però non metti sullo heap i tre interi;

Stai mettendo sullo stack 3 interi e allocando sullo heap spazio per tre interi che referenzi tramite tre puntatori che subito dopo fai puntare ai tre interi sullo stack...


Infatti prova a commentare questa riga e vedrai che il codice funziona lo stesso:

P1=(int*)malloc(sizeof(int)); P2=(int*)malloc(sizeof(int)); P3=(int*)malloc(sizeof(int));

questa è la riga dove allochi sullo heap dello spazio per tre interi e referenzi quello spazio con i puntatori dichiarati, solo che nella riga sotto:

*P1=X; *P2=Y; *P3=Z;

dici ai puntatori di lasciar perdere lo spazio sullo heap e di puntare ai tre interi X,Y,Z che avevi allocato sullo stack così:

dichiarazione:

int X, Y, Z;


inizializzazione dei valori:

printf("inserire X, Y e Z");
scanf("%d%d%d",&X,&Y,&Z);

Ciao :)