webForumDet fria alternativet

array storlek

C/C++

3 svar · 358 visningar · startad av Reza

Medlem sedan feb. 2001107 inlägg
Frågan#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.

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

Medlem 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

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

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)