---
title: "Fel med pekare..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/126978-fel-med-pekare"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Broms"
published: "2005-04-24T01:50:44.000Z"
updated: "2005-04-24T16:47:05.000Z"
replies: 3
views: 254
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/126978-fel-med-pekare"
---

# Fel med pekare...

## #1 — Broms, 2005-04-24T01:50Z

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
```

Permalänk: https://www.webforum.nu/p/126978

## #2 — PeW, 2005-04-24T07:00Z

Du gör fel med:

```
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 :)

Permalänk: https://www.webforum.nu/p/1598961

## #3 — Broms, 2005-04-24T16:32Z

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..

Mvh Broms

Permalänk: https://www.webforum.nu/p/1599131

## #4 — PeW, 2005-04-24T16:47Z

Vassego  :)

Permalänk: https://www.webforum.nu/p/1599138

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/126978-fel-med-pekare
