Tablice o deklarowanej dlugosci vs tablice dynamiczne

0

Dzien dobry. Potrzebuje napisac program ktory wykonuje pewna operacje na roznych tablicach. W programie mam zadeklarowane tablice:

const int tab1[3] = {1,2,3}; 
const int tab5[6] = {1,2,3,7,2,6}; 

Teraz chcialbym stworzyc uniwersalna funkcje ktora bedzie dostawala w agumencie tablice, odczytywala jej dlugosc i np wypisywala wszystkie elementy tablicy. Nie mam pojecia jak zadeklarowac typ ktory taka funkcja moze brac i jak konwertowac konkretna tablice o konkretnej dlugosci przy wywolywaniu funkcji ... z gory dziekuje za pomoc!</cpp>

0

Funkcje operujace na tablicach wygladaja zazwyczaj tak:

void print(int * array, size_t size){
// ...
}

Przekazujesz do funkcji nazwe tablicy, ktora zostanie przekonwertowana w wywolaniu na wskaznik na jej pierwszy element, drugi parametr mowi nam jakiego rozmiaru jest tablica, musi on wystapic gdyz nie uzyskamy rozmiaru tablicy ze wskaznika na nia(sizeof zwroci nam rozmiar wskaznika a nie tablicy).

Przykladowe uzycie:

int tab[4] = {1,2,3,4};
print(tab, 4);
0

A nie da rady jakos odczytac rozmiar stalej? No jak nie to trudno ...

0

W sumie można - jeśli masz pewność, że do funkcji będziesz podawać tylko tablice (czyli rzeczy, do których masz tylko wskaźnik /wszystko alokowane na stercie/ nie przejdą), to możesz zrobić coś w stylu

template <size_t N>
void foo(int const (&array)[N])
{
  //...
}

A jeśli ci zależy na możliwości podawania także innych rzeczy (w "normalny" sposób, jaki pokazał xmoon), to zrób z tego kodu wyżej krótki wrapper na właściwą implementację, który przekaże wskaźnik i rozmiar:

void foo(const int* arr, size_t size)
{
  //...
}

template <size_t N>
void foo(int const (&array)[N])
{
  foo(array, N);
}

Coś na bank popieprzyłem ;)

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