---
title: "Nybörjarfråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/101215-nybörjarfråga"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "tosses"
published: "2004-04-10T08:10:38.000Z"
updated: "2004-05-13T11:45:28.000Z"
replies: 10
views: 468
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/101215-nybörjarfråga"
---

# Nybörjarfråga

## #1 — tosses, 2004-04-10T08:10Z

Hej!

Hur gör man för att ta med sig ett värde från en funktion tillbaka till main och stoppa in värdet i nästa funktion?

ex:

funkt1(int tal1)
{
      tal1 += 3;
     return tal1 tillbaka till main typ?
}

funktion2(int tal2)
{
      tal2 += 25;
}

main()
{
     funkt1(12);
    funkt2(tal1 från funktion1);
}

Ungefär.. Hoppas ni förstår hur jag menar!

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

## #2 — Viktor, 2004-04-10T08:17Z

Det finns flera sätt.
I detta exemple använder jag return funktionen för att retunera ett värde från funktionen till den anroppande funktionen,

```
int funkt1(int tal1)
{
	return(tal1+3);
}

int funktion2(int tal2)
{
	return(tal2+25);
}

int main(int argc, char** argv)
{
	int tal1=funkt1(12);
	int tal2=funkt2(tal1);
	cout << "Svaret bli: " << tal2 << endl;
	return(0);
}
```

/Viktor

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

## #3 — tosses, 2004-04-10T08:22Z

Men om jag vill returnera 3 tal , tal1 tal2 tal3 från funktion1 som jag sen vill stoppa in i funktion2 där jag sen vill returnera 3 tal igen och stoppa in i funktion 3

void main()
{
	inlasning();
	sortering(3 tal från funktion inlasning); 
                bytplats(3 tal från funktion sortering);
                utskrift(3 tal från funktion bytplats);
}

float inlasning()
{
	float tal1=0,tal2=0,tal3=0;
	cout\<\<"Ange 3 tal: ";
	cin\>\>tal1\>\>tal2\>\>tal3;
	return tal1,tal2,tal3;
}

void sortering(float stal1, float stal2, float stal3)
{
	if(stal1 \> stal2)
	{
		bytplats(stal1, stal2);
	}
	else if(stal2 \> stal3)
	{
		bytplats(stal2, stal3);
	}
}

void bytplats(float btal1, float btal2)
{
	float temptal;
	temptal = btal1;
	btal1 = btal2;
	btal2 = temptal;
}

void utskrift()
{
}

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

## #4 — Marcus E, 2004-04-10T12:02Z

Byt ut float mot float&. 

Då kommer det att skapas en referens till den variabel som skickas som argument. Det går endast i C++.

I C går det att göra på ett liknande sätt med \* istället för &.

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

## #5 — tosses, 2004-04-11T11:35Z

Men kan man returnera flera värden från en funktion??

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

## #6 — PeW, 2004-04-11T11:41Z

> **tosses skrev:**
>
> Men kan man returnera flera värden från en funktion??

Nej. Men du kan modifiera vid anropet medskickade parametrar och du kan returnera en pekare till en datasamling som innehåller flera värden.

I C är det vanligt att man inte returnerar värdet utan en felkod. Värdena som ska modifieras sänds som pekare till adresserna de ligger på och i funktionen är det bara att pilla med dem så består resultatet när funktionen terminerat.

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

## #7 — tosses, 2004-04-11T16:07Z

vad är det exat som händer här?? :

void sortering()
{
	if(tal1 \> tal2)
	{
		bytplats(tal1, tal2); 
	}
	if(tal1 \> tal3)
	{
		bytplats(tal1, tal3);
		
	}
	if(tal2 \> tal3)
	{
		bytplats(tal2, tal3);
	}
}

void bytplats(float& tal1, float& tal2) //
{
	float temptal;
	temptal = tal1;
	tal1 = tal2;
	tal2 = temptal;
}

alltså med float&

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

## #8 — PeW, 2004-04-11T16:16Z

& är referenser, vilket innebär att du sänder *adressen* till variablerna tal1 och tal1, istället för en kopior av värdena för tal1 och tal2. Om det varit det senare hade kopiorna försvunnit när funktionen är klar, men genom att det är adresser du skickar så är det innehållet på just den adressen du bearbetar och därför är värdena då förändrade efter att funktionen är klar (iom att funktionen byter plats på dem).  :)

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

## #9 — FredrikF, 2004-04-25T14:27Z

> **PeW skrev:**
>
> & är referenser, vilket innebär att du sänder *adressen* till variablerna tal1 och tal1, istället för en kopior av värdena för tal1 och tal2.

Rätt men ändå lite diffust svarat.

& och & är olika saker. Dels betyder &-tecknet addressen till en pekare men det kan också betyda att man avser att skicka parametrar by reference till en funktion. Det är olika saker.

Sedan att referenser är slags pekare gör inte att man kan likställa de två betydelserna av &-tecknet.

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

## #10 — PeW, 2004-04-25T19:26Z

Jo, men i grund och botten är det samma sak, även om det är dolt i ett mer eller mindre abstrakt lager. Det är fortfarande adressen som explicit skickas med och inte kopior av värdena på den adressen. Kändes inte meningsfullt att i denna tråd lägga upp en mer djupgående förklaring kring adresser, stackar och funktionsanrop.

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

## #11 — forum, 2004-05-13T11:45Z

Jag vet precis vad ni menar, och håller med. Så är det!
Men jag undviker att tänka på det, jag har det bara i bakhuvudet.

Som människa, märker man inte så stor skillnad (nästan ingen)
Och det är ju det som är lite tanken med C++ och OOP:
 'Tänk som den människa du är - och inte som en dator'   :)

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

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/101215-nybörjarfråga
