---
title: "Funktion som returnerar referens till för funktionen lokalt objekt?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/135054-funktion-som-returnerar-referens-till-för-funktionen-lokalt-objekt"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Tinwëlint"
published: "2005-09-30T22:16:47.000Z"
updated: "2005-10-02T20:07:11.000Z"
replies: 9
views: 825
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/135054-funktion-som-returnerar-referens-till-för-funktionen-lokalt-objekt"
---

# Funktion som returnerar referens till för funktionen lokalt objekt?

## #1 — Tinwëlint, 2005-09-30T22:16Z

Hur kan det här fungera? Fick i uppgift att skriva en funktion som returnerade en referens till det minsta elementet i en array. Satt som bäst och hackade runt och försökte skicka pekare till funktionen men testade till slut det här:

```
#include <iostream>

int & min(int arraycount, int  array[]);

using namespace std;
int main() {

	int array[]={8,-5,7,0,-3};

	min(5, array) = 123;
	for(int i=0;i<5;i++)
		cout<<array[i]<<endl;

return 0;

}

int & min(int arc, int arr[]){

	for(int i=1,min=arr[0],minindex;i<arc;i++){
		
		if (arr[i]<min){
			min=arr[i];
			minindex=i;
		}

	}

	int & rMin = arr[minindex];
	return rMin;
}
```

Har jag missat något eller? arr\[\] ska ju vara en array som kopieras till stacken och endast existerar med funktionen min. En referens till ett element i den borde ju inte rimligtvis vara en referens till ett element i den array som kopierats till funktionen. Men likväl är den det.

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

## #2 — PeW, 2005-10-01T07:00Z

array\[\] = \* array, dvs det du gör är att skicka en pekare till första elementet i din array, inte lägga en kopia på den lokala stacken. Hade det varit en vanlig variabel så javisst, men det är annorlunda med arrays. Sen manipulerar du den referens du får tillbaka som inte heller den är i den lokala stacken av samma orsak.

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

## #3 — Sang-drax, 2005-10-01T15:36Z

Dessutom är det tur för dig att den är det, för du får inte returnera en referens till ett lokalt objekt och tro att något förutsägbart kommer att hända.

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

## #4 — Tinwëlint, 2005-10-01T16:50Z

OK. Tänkte väl att det var nåt sånt. Javisst är det en ful och ganska dålig metod att bara testa lite olika sätt och se vilket som fungerar.
Men då har jag en följdfråga. Vad är skillnaden:

```
int & min(int * arr[])

int & min(int arr[])

int & min(int & arr[])
```

Den första borde väl innebära att man ska skicka en pekare  (som då ska peka på arrayens första element?) i anropet. Enligt mitt test är den ogiltig och borde ha kanske ha en bestämd längd på arrayen.

Den andra innebär alltså att man, hur man ska säga, transparent skickar en pekare till arrayens första element. Den måste i vilket fall vara det smidigaste sättet när det sen kommer till att anropa funktionen.

Den sista då. Den fungerade inte så bra. Men den är väl kanske också ogiltig och arrayen måste ha en bestämd längd lika med längden av arrayen som skickas med anropet. Korrekt?

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

## #5 — PeW, 2005-10-01T17:24Z

Den första innebär en pekare till en array som har pekare som element, eller adresser om du så vill.
Den andra som pekare till första elementet 
Den tredje som en referens till en array

Arrays kan skrivas på olika sätt men ändå betyda detsamma: 
array *\= i\[array\] = \*(array+i)
Det gemensamma är att endast namnet alltid pekar på första adressen (till första elementet) samt en indexering mot resten.*

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

## #6 — Tinwëlint, 2005-10-01T22:04Z

Jag funderade på varför det inte fungerar att returnera en pekare till ett element i arrayen som refereras genom anropet i alternativ tre.

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

## #7 — UlfT, 2005-10-01T22:15Z

Om du vill returnera en pekare till något element i arrayen, varför inte pröva följande:

int \* min(int \*array)

Sedan returnerar du med:

return array\[minindex\];

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

## #8 — Tinwëlint, 2005-10-01T22:33Z

Ojdå, jo det är klart.
Men jag skrev visst fel. Jag menade:
Jag funderade på varför det inte fungerar att returnera en *referens* till ett element i arrayen som refereras genom anropet i alternativ tre.

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

## #9 — PeW, 2005-10-02T04:28Z

Men du returnerar ju en referens till ett element redan. Annars hade inte "min(5, array) = 123;" fungerat.

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

## #10 — Tinwëlint, 2005-10-02T20:07Z

Jo jag vet. Men jag gör det genom att använda:

```
int & min(int arr[])
```

som gör att en pekare till arrayens första element skickas till funktionen.

Jag undrar bara varför det inte fungerar att skicka en referens till arrayen till funktionen:

```
int & min(int & arr[])
```

och sedan returnera en referens till ett av elementen i den refererade arrayen.

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

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/135054-funktion-som-returnerar-referens-till-för-funktionen-lokalt-objekt
