PDA

Visualizza la versione completa : [C] Problema con printf


Devour
17-04-2013, 14:17
Ciao,
sto scrivendo un semplice programma in c che dati due interi ne scambia l'indirizzo per mezzo di due puntatori.
Se il codice è il seguente (p e q sono i puntatori) non ho problemi:



stampa(p,q);
swap(p,q);
stampa(p,q);


infatti inserendo per esempio 3 e 5 ottengo:



p: contenuto: 3 , indirizzo 0xbf907130.
q: contenuto: 5 , indirizzo 0xbf907134.
p: contenuto: 5 , indirizzo 0xbf907130.
q: contenuto: 3 , indirizzo 0xbf907134.


Se però inserisco delle printf in questo modo:


printf( "Prima dello scambio:\n);
stampa(p,q);
swap(p,q);
printf("Dopo lo scambio:\n");
stampa(p,q);


ottengo:


Prima dello scambio:
p: contenuto: 14617120 , indirizzo 0xbfc988e0.
q: contenuto: 134514938 , indirizzo 0xbfc988e4.
Dopo lo scambio:
p: contenuto: 134514938 , indirizzo 0xbfc988e0.
q: contenuto: 14617120 , indirizzo 0xbfc988e4.


non capisco perchè...mi succede lo stesso se utilizzo fprintf..

oregon
17-04-2013, 14:25
Mostra tutto il codice delle varie funzioni ...

Devour
17-04-2013, 14:29
void stampa(int* p, int* q)
{
printf("p: contenuto: %d , indirizzo %p.\n", *p, p);
printf("q: contenuto: %d , indirizzo %p.\n", *q, q);

}



void swap(int *x,int *y)
{
int temp;
temp= *x;
*x=*y;
*y=temp;
}

Eduadie
17-04-2013, 22:18
Nelle procedure tu dichiari i parametri come puntatori quindi tu devi passargli il loro indirizzo di memoria.



#include <stdio.h>

void stampa(int* p, int* q)
{
printf("p: contenuto: %d , indirizzo %p.\n", *p, p);
printf("q: contenuto: %d , indirizzo %p.\n", *q, q);

}



void swap(int *x,int *y)
{
int temp;
temp= *x;
*x=*y;
*y=temp;
}

int main()
{
int p, q;
scanf("%d", &p);
scanf("%d", &q);
printf( "Prima dello scambio:\n");
stampa(&p,&q);
swap(&p,&q);
printf("Dopo lo scambio:\n");
stampa(&p,&q);
return 0;
}

Loading