[C++] Problem med Array som funktionsparameter

Permalänk
Medlem

[C++] Problem med Array som funktionsparameter

Hej!

Jag har en funktion som tar en array som parameter,

funktion(int x, int a[])

Inne i funktionen vill jag räkna ut hur lång arrayen är. Problemet är att sizeof(a) tar storleken på pekaren till arrayen eftersom det är innuti en funktion. Finns det något bra sätt att lösa det på?

Jag vill inte ändra på funktionshuvudet eller köra med ett makro.

Permalänk
Medlem

Tror inte det finns något sätt om du inte vill låta sista elementet i arrayen vara något speciellt (tex \0) eller låta första elementet innehålla storleken (dvs a[0] är storleken och så börjar elementen på a[1]). Det enda du skickar in till funktionen är ju en pekare.

Edit:
Vaddå inte vill använda macro? Hur skulle du lösa den med ett sånt?

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Använd std::vector så kan du får ut längden från medlemsfunktionen size. Du kan nog inte göra det utan att ändra lite på funktionen. Ett annat sätt vore att skicka med storleken som parameter (om du inte använder vector).

void f(vector<int> v) { cout << v.size() << endl; // skriver ut storleken }

Permalänk
Medlem

Hittade en sida som verkar ha en lösning:

http://blogs.msdn.com/the1/archive/2004/05/07/128242.aspx

Blir nog vector ändå.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Ereinion
Använd std::vector så kan du får ut längden från medlemsfunktionen size. Du kan nog inte göra det utan att ändra lite på funktionen. Ett annat sätt vore att skicka med storleken som parameter (om du inte använder vector).

void f(vector<int> v) { cout << v.size() << endl; // skriver ut storleken }

Ska man vara tjatig så är det nog bättre att skicka vectorn som referens så att man slipper få hela vectorn kopierad. Men det har ju inget med saken att göra som sådant.

Visa signatur

(http://rivfader.blogspot.com)
Blank face in the windowpane
Made clear in seconds of light

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Lothar
Hittade en sida som verkar ha en lösning:

http://blogs.msdn.com/the1/archive/2004/05/07/128242.aspx

Blir nog vector ändå.

Du ville ju absolut inte ändra funktionshuvudet? ISF kan du ju bara slänga in storleken som en parameter?

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Myris
Du ville ju absolut inte ändra funktionshuvudet? ISF kan du ju bara slänga in storleken som en parameter?

Mm, därför jag tänkte att det blir bättre att köra med std::vector.

Permalänk
Medlem

Men om du kör med en vektor så måste du ju ändra funktionshuvudet?

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Ahh, kanske var lite luddig. Jag vill inte lägga till parametrar. Den ska ta emot en int och en array, och en vektor är ju att klassa som en array. Bara funktionen tar emot ett tal och en lista som den ska söka igenom.