Wystarczy samo unsigned / unsigned int, ewentualnie unsigned short / unsigned short int. Przy okazji... Dla trybu 16-bit tablice mają rozmiary 16bit (max 64kB), stąd i indeksy mieszczą się w zakresie 2-bajtowego nieozanczonego inta.
Jeśli potrzebujesz tablice większą niz 64kB...
main(){
typ** tablica;
long ilosckomorek=... // twoje dane, wiecej niz 65536, stąd long;
unsigned count=0
x
8000/sizeof(typ); // ile komorek miesci sie w 32kB
unsigned j=ilosckomorek%count; // ile komorek w ostatniej tablicy
unsigned i=(ilosckomorek/count)+(j>0); // ile w sumie tablic tablic bedzie
unsigned k=i;
tablica=new(typ*)[i]; // przydzielamy pamiec tablicy tablic
if(j)tablica[--i]=new typ[j]; // ostatnia, niepelna linijka
while(i--)tablica[i]=new typ[count]; // while(i)tablica[--i]=new typ[count]; // pelne linijki.
long l; //- indeks komorki; 0..ilosckomorek-1
typ zmienna;
zmienna=tablica[l/count][l%count];
tablica[l/count][l%count]=zmienna;
while(k--)delete tablica[k]; // zapamietac, zaby wiedziec ile zwolnic
delete tablica;
}
Rozmiar 0x8000 jest arbitralnie ustalony, jest obojetny, byleby był mniejszy od 0xffff
// pisałem w sumie, żeby sobie potrenowac. Nie wiem... W twoim przypadku jesli potrzebujesz tablice dlugich tablic, to deklaracja wygladalaby... tablica*** typ. :] hehe. Ale ** wystarczy, by zaalokować cale dostepne 640kB.