Rozmiar tablicy w C++ - jak otrzymać w funkcji

0

Witam,

Mój problem jest taki: muszę zastosować w funkcji tablicę, ale chcę aby funkcja sama ustalała, jaki jest wymiar tej tablicy:

void ile(int tab[])
{
int w=sizeof(tab)/sizeof(int);
cout<<w;
}
void ile(int tab[]);
int main()
{
int tab1[11];
int n;
cout<<"z funkcji:tyle elementow ma wektor"<<endl;
ile(tab1);

system("pause");
return 0;
}
Oczywiśce powyższy kod jest niepoprawny, bo zwraca rozmiar wskaźnika do pierwszego elementu tablicy - ale widać, o co mi chdzi - jak w funkcji wyliczyć rozmiar tablicy przekazanej jako argument.

Z góry dziękuję za rady

L@mer

0

Nie da się... I w sumie dlaczego miałoby sie dać? Skoro sam tworzysz tablicę, nawet dynamicznie, to doskonale wiesz jaki ma aktualnie rozmiar.

1

Fakt, nie da sie... Normalnie
Dalo by sie jesli by zastosowac sposob analogiczny do stringow (ASCIIZ, ASCII ZERO-terminated), czyli wyznaczyc jedna wartosc ktora NIGDZIE INDZIE NIE WYSTAPI w tej tablicy, tylko na jej koncu...
np niech to bedzie -1 (zakladajac ze reszta tablicy to sa wartosci dodatnie, w tablicy typu int)

int tab_size( int[] tab )
{
  int size = 0;
  while( *tab != -1 )
  {
    size++;
    tab++
  }
  return 0;
}

w wypadku ASCIIZ ofc jest to nie -1 tylko 0 ;> polecam zajrzenie do zrodel strlen (tego prostego ;p)
i to by bylo na tyle jesli chodzi o proste sposoby...
jesli chodzi o dynamiczne alokowanie to moooze mozna dorwac sie jakos do informacji ktore malloc sobie po(przed?) alokowanej pamieci zapisuje... moze.. nie wiem, nie sprawdzalem... ale ofc malloc allokuje wiecej niz trzeba, tak ze to nie bedzie to i tak dokladne..
moze mozna samemu sobie stworzyc strukture w ktorej bedziemy wielkosci wzgledem pointera do pierwszego elementu zapisywac...

ale jak widac sa to metody "na okolo".. obawiam sie ze metody "wprost" dla KAZDEJ tablicy nie ma;/

pokoj, Gynv

1 użytkowników online, w tym zalogowanych: 0, gości: 1