I koden nedan blir det ett fel. Felet är i funktionen ordna, som i sin tur skall använda sig av funktionen swap. Erroren som kommer är:
In function `void ordna(int*, int*, int*)':
cannot convert `int**' to `int*' for argument `1' to `void swap(int*, int*)'
cannot convert `int**' to `int*' for argument `2' to `void swap(int*, int*)'
cannot convert `int**' to `int*' for argument `1' to `void swap(int*, int*)'
\<------------ VARFÖR STÅR DET INT\*\*?????????
de är på raderna swap(&x, &y); osv, inuti ordna-funktionen. Kan någon hjälpa lite? Det har ju att göra med att pekarna inte fungerar som det ska..
/*
Name: Swap2_3
Copyright: none
Author: Ebs.
Date: 24-04-05 02:07
Description: Programmet har två funktioner. Den första byter plats på
värdena i 2 variabler. Den andra byter plats på värdena i
3 variabler.
*/
#include <stdio.h>
#include <stdlib.h>
/*********************
Namn: swap
Beskrivning: Byter plats på värdena i de 2 variablerna x,y.
Inparameter: int x, y.
Utparameter: int x, y.
**********************/
void swap(int *x, int *y);
/*********************
Namn: ordna
Beskrivning: Byter plats på värdena i de 3 variablerna x,y,z.
Inparameter: int x, y, z.
Utparameter: int x, y, z.
**********************/
void ordna(int *x, int *y, int *z);
int main()
{
int x=6, y=4, z=5;
printf("Innan swap:\n");
printf("x=%d, y=%d\n",x,y);
swap(&x,&y);
printf("Efter swap:\n");
printf("x=%d, y=%d\n\n\nDel2..\n\n",x,y);
//reset values
x=6;
y=4;
z=5;
printf("Innan ordna:\n");
printf("x=%d, y=%d, z=%d\n\n",x,y,z);
printf("Efter ordna:\n");
printf("x=%d, y=%d, z=%d\n\n",x,y,z);
ordna(&x, &y, &z);
printf("\n\nProgrammet avslutas..\n\n");
system("PAUSE");
return 0;
}
void swap(int *x, int *y){
int slask;
slask = *x;
*x = *y;
*y = slask;
} //end swap
void ordna(int *x, int *y, int *z){
if(*y>*x)
swap(&y,&x);
if(*z>*y)
swap(z,&y);
if(*y>*x)
swap(&y,&x); //kör samma som ovan en extra gång då det ursprungliga z måste jämföras med både x,y.
} //end ordna
void ordna(int *x, int *y, int *z){
if(*y>*x)
swap(&y,&x);
if(*z>*y)
swap(z,&y);
if(*y>*x)
swap(&y,&x); //kör samma som ovan en extra gång då det ursprungliga z måste jämföras med både x,y.
} //end ordna
x,y,z är deklarerade i funktionen ordna, som pekare. Det du skickar med som parametrar till swap i dina anrop är adressen till pekaren och inte pekaren. Så ta bort '&' före dina x,y,z's i funktionen 'ordna' så bör det lösa sig. För att få programmet att funka som du vill mot utskrifterna bör du även flytta upp anropet av 'ordna' till innan den sista utskriften :)
tackar PeW, nu funkar det som det skall!! Var inte bara felsökningen utan förklaringen som var guld värd. Förstod först inte varför det vart en "dubbel" pekare, dvs adressen till pekaren..