C++ przekazywanie przez referencje - tablice

void zlosliwieZamienZawartosc(int tablica[],unsigned rozmiar)  {   int *podtablica=new int[rozmiar]; // nie możesz użyć sizeof() bo zwróci rozmiar taki jak sizeof(int*);   for(int i=0;irozmiar;++i) // w for też nie możesz użyć sizeof()      {       podtablica[i]=tablica[i];       tablica[i]=0;      }  }

No dobra, ale jeśli bym miał przydzielony rozmiar dynamicznie, to jak mam sprawdzić długość tablicy?

Nie ma takiej możliwości.

Ale zawsze możesz użyć:

#include

Hm… a gdybym przechodził po wskaźnikach i sprawdzał na co on wskazuje albo jakoś tak?

Dodane 21.05.2010 (Pt) 20:44

hmm… czy ktoś może mi wyjaśnić dlaczego jak przekaże tablicę do funkcji tablicę i spróbuję z nią zrobić coś takiego:

cout << sizeof(tablica)/sizeof(*tablica) << endl;

to mi nie działa, ale jeśli zadeklaruję tą tablicę

int tablica2[222];

cout << sizeof(tablica2)/sizeof(*tablica2) << endl;

to jest ok. Dlaczego?

Dodane 21.05.2010 (Pt) 21:00

Tzn. przekazuję tablice do funkcji na zasadzie

void mojaFunkcja(int tablica) {

cout << sizeof(tablica)/sizeof(*tablica) << endl;

}

void main() {

// … kod

mojaFunkcja(tablica);

}

Ktoś ma jakieś na to wytłumaczenie?

Sprawdź jakiego typu jest coś co się kryje pod nazwą “tablica” w mainie, a jaki typ przyjmuje mojaFuncja jako argument.

Gdybyś przechodził po wskaźnikach i sprawdzał na co on wskazuje to byłoby jakoś tak - cokolwiek to znaczy.

Jeżeli poprawnie przekazujesz tablice do funkcji:

int *tablica

lub:

int tablica[]

to jest dokładnie tak jak wyjaśniłem w pierwszym poście:

// nie możesz użyć sizeof() bo zwróci rozmiar taki jak sizeof(int*); [/code]

czyli wyrażenie sizeof(tablica)/sizeof(*tablica) zawsze ma wartość 1.

Jeżeli funkcja przyjmuje argument:

int tablica, to nie ma mowy o przekazaniu tablicy, co najwyżej jednego jej elementu i to przez wartość.

“Nie przechodzi” w tym fragmencie operator wyłuskania:

*tablica

który ma za zadanie wyłuskać obiekt z jego adresu, ponieważ tablica nie jest adresem to akurat tu kompilator się załamuje.