PDA

Visualizza la versione completa : [C] esempio semplice scambio valore a e b


Enna90
14-02-2013, 01:48
So che è un esempio banalissimo ma qualcuno potrebbe illuminarmi sul perché non va? Grazie



#include<stdio.h>

int cambia(int *a, int *b){
a = 1;
b = 2;
return (a,b);

}

int main(){
int a = 5, b = 77;

cambia( a, b);

printf(" a :%d", a);
printf(" b :%d" , b);

return 0;
}

Metalmino
14-02-2013, 02:00
Ti ho riscritto il codice:


#include<stdio.h>

void cambia(int *a, int *b){
*a = 1;
*b = 2;


}

int main(){
int a = 5, b = 77;

cambia( &a, &b);

printf(" a :%d", a);
printf(" b :%d" , b);
system("PAUSE");

return 0;
}

Se richiedi puntatori allora devi passare i valori per riferimento per cambiarli. E poi se ritorni un intero quando chiami la funzione nel main devi assegnarla ad un intero.

Enna90
14-02-2013, 02:20
Quindi , secondo questo esempio , avendo la funzione




void bubbleSort(int *v, int *size){

int i;
int tmp;
while(size>0)
{
for(i=0;i<size-1;i++)
{
if(v[i]>v[i+1])
{
tmp=v[i];
v[i]=v[i+1];
v[i+1]=tmp;
}
}
size--;
}
printf("Dopo: ");
for(i=0;i<size;i++)
{
printf("%d ",v[i] );
}
printf("\n");
return 0;
}



Per richiamarla potrei fare bubbleSort( &v , &size );???

Metalmino
14-02-2013, 02:35
In linea di massima si. Ti rispondo così perchè vedo che v è un vettore di interi, quindi bisogna vedere come l'hai inizializzato perchè per i vettori non c'è bisogno di passarli per riferimento. Per size và bene, però quando decrementi size mettici il puntatore (*size--).

Enna90
14-02-2013, 02:48
Ho inizializzato v così nel codice main nel quale prendo in input un array dinamico numerico

int *v=NULL ;

Ho provato ad apportare la modifica che mi hai detto ma nn va :dhò:

Metalmino
14-02-2013, 03:54
Inizializzi v come puntatore e lo imposti a null, ma se non gli allochi la memoria ti attacchi al tram :mem:

v=malloc(sizeof(int)*256);

Ovviamente quel 256 varia, dipende da quanti elementi ti servono :mem:

oregon
14-02-2013, 11:03
Ma il problema qual è?

Non ho ancora capito la domanda di questo thread ...

Loading