webForumDet fria alternativet

array storlek

3 svar · 356 visningar · startad av Reza

RezaMedlem sedan feb. 2001107 inlägg
#1

Hur kan man få reda på storleken av en array som via pekare är skickat till ett funktion?
Sizeof fungerar ju inte.
Alltså. Jag har en array med storleken 6 av data typen foo, sen har jag en funktion som tar emot ett pekare av typen foo, i denna funktion vill jag nu räkna ut array storleken.

PeWMedlem sedan juni 200010 432 inlägg
#2

Man brukar hålla reda på storleken och sen skicka med den tillsammans med pekaren:

void foo(void *pek,int len);

Ett annat sätt är att ha en terminerande symbol på slutet, som \0 i string, fast det fungerar ju inte på exempelvis arrays av alla tal inom typens intervall.

ViktorMedlem sedan aug. 20021 752 inlägg
#3

Vilken storlek vill du räkna ut? Antalet element i arrayen eller storleken som arrayen tar i minnet?
Om du vill ha reda på antalet element så går det inte med vanliga pekare och arrayer i C++ utan det får du själv hela tiden hålla reda på.
Det finns två sätt, antingen skickar du med storleken på din array eller så skickar du med en pekare till sista elementet i din array,

int main(int argc, char* argv[])
{
	Foo f=new Foo[6];
	func1(f,f+6);
	func2(f,6);

	return(0);
}

//Tar en pekar till första och sista elementet och går igenom alla element mellan dem
void func1(Foo *first, Foo *last)
{
	for(;first<last+1;first++)
	{
		cout << "Hej!" << endl;
	}
}

void func2(Foo *arr, int size)
{
	for(int i=0;i<size;i++)
	{
		cout << "Hej!" << endl;
	}
}

/Viktor

spangoMedlem sedan juni 20008 205 inlägg
#4

Alltså, kort och gott: Det går inte automatiskt. Måste göras manuellt, normalt på nåt av de sätt som PeW och Viktor beskriver.

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)