Alla on ohjelma, joka minulla on kasassa. Olen juuri harjoittelemassa osoitinten kanssa.
Tarkoitus on saada syötetty ensimmäinen luku vaihtamaan paikkaa syötetyn toisen luvun kanssa.
Osaako joku sanoa, miten tuon ohjelman oikeastaan saisi toimimaan?
#include
void swap(int *x, int *y);
void main(void)
{
int luku1, luku2, *p1, *p2;
printf("Anna kaksi lukua:\n");
scanf("%d%d", &luku1, & luku2);
p1 = & luku1;
p2 = & luku 2;
luku1 = swap(*p1, *p2);
printf("Ensimmäinen luku on %d", *p1 );
printf("Toinen luku on %d", *p2);
}
void swap(int *x, int *y)
{
int *p1, *p2, tmp; //Apumuuttuja swappaukseen
tmp = *p1;
}
Tarkoitus on saada syötetty ensimmäinen luku vaihtamaan paikkaa syötetyn toisen luvun kanssa.
Osaako joku sanoa, miten tuon ohjelman oikeastaan saisi toimimaan?
#include
void swap(int *x, int *y);
void main(void)
{
int luku1, luku2, *p1, *p2;
printf("Anna kaksi lukua:\n");
scanf("%d%d", &luku1, & luku2);
p1 = & luku1;
p2 = & luku 2;
luku1 = swap(*p1, *p2);
printf("Ensimmäinen luku on %d", *p1 );
printf("Toinen luku on %d", *p2);
}
void swap(int *x, int *y)
{
int *p1, *p2, tmp; //Apumuuttuja swappaukseen
tmp = *p1;
}
Vastaukset 4
Vanhimmat
static void swap(int *x, int *y){
tmp=*x;
*x=*y;
*y=tmp;
}
void swap(int *x, int *y) {
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
luku1 = swap(*p1, *p2);
on vähän hämärä... eli p1 osoittaa muuttujan luku1 arvoon, minkä ylikirjoitat ko. rivillä
eli väittäisin, että se pitää muuttaa muotoon:
swap(*p1, *p2);
ja varmaan kannattaa miettiä koulutehtävien tekemistä itse jatkossa ;)
#include
void swap(int *x, int *y); //void tarkoittaa että ei palauta mitään arvoa
void main(void)
{
int luku1, luku2;
printf("Anna kaksi lukua:\n");
scanf("%d%d", &luku1, & luku2);
swap(&luku1, &luku2);
printf("Ensimmäinen luku on %d", &luku1 );
printf("Toinen luku on %d", &luku1 );
}
void swap(int *x, int *y)
{
int *tmp; //Apumuuttuja swappaukseen
tmp = x;
x=y;
y= tmp;
}