Sizeof() - wynik w bitach


(przemekKK) #1

Muszę utworzyć tablicę dynamiczną. Więc żeby znać jej wielkość chcę utworzyć zmienną np.

int wielkosc

do której użytkownik poda liczby np. 1234. W szkole powiedziano, że na podstawie zmiennej wielkość, aby znaleźć wielkość tablicy trzeba użyć:

sizeof(wielkosc)

Ale wynik mam w bajtach. Czy da się jakoś zrobić tak że po wpisaniu np.123 sizeof zwróciło że zajmuje to 3 bity?


(Fiołek) #2

123 nie zajmuje 3 bitów, 123 zajmuje co najmniej 7 bitów.

Tablic nie tworzy się w oparciu o bity(ew. bajty) tylko o ilość elementów. Więc jeśli użytkownik Ci poda wielkość = 123 tworzysz tablice o 123 elementach(new TYP[123]), czyli tak:

tablica = new TYP[123];

, gdzie TYP to typ elementów tablicy.


(przemekKK) #3

Chodzi mi o to, że użytkownik poda np. 12345 a ja muszę wiedzieć że to jest 5-elementowa tablica, a jak 123456 to 6-elementowa.


(Fiołek) #4

No to pobierasz to jako ciąg znaków i wtedy wielkość jest równa długości tego ciągu.


(przemekKK) #5

A Mógłbyś napisać jak wykorzystać te ciągi danych?


(Fiołek) #6

Rozwiń pytanie bo nie bardzo rozumiem...


(przemekKK) #7

Czy Mógłbyś napisać przykładowy kod? Byłbym bardzo wdzięczny za pomoc.


(Fiołek) #8

Nie mógłbym, bo to niezgodne z regulaminem.


(Komputerowiec21w) #9

Operator sizeof zwraca liczbę int równą ilości bajtów zajmowanych przez badany obiekt. Przy rezerwacji tablic dynamicznych operator ten w ogóle się nie przydaje.

int wielkosc, *wsk;

cin >> wielkosc;

wsk = new int[wielkosc];

W taki sposób tworzy się tablice dynamiczne. Do tablicy takiej odnosisz się używając nazwy wskaźnika, który pokazuje na jej początek (w tym wypadku wsk). Teraz uwaga: podanie przez użytkownika liczby 1234 nie spowoduje utworzenia tablicy 4-elementowej, tablica ta będzie mieć 1234 elementów (bo tyle wynosi wartość zmiennej wielkosc).

Jeśli chodzi o rozwiązanie, w którym podanie liczby 12345 skutkuje utworzeniem tablicy 5-elementowej to wydaje mi się ono zupełnie bezsensowne i nie proponowałbym go.


(przemekKK) #10

A Czy mógłbyś napisać jak to zrobić, ponieważ muszę użyć tego.


(Komputerowiec21w) #11

Nie. Po pierwsze to niezgodne z regulaminem, po drugie nie ma to żadnej wartości dydaktycznej. Wiesz już, jak działa mechanizm, teraz musisz tylko zmodyfikować program tak, by działał zgodnie z przyjętą przez Ciebie koncepcją. Powodzenia :wink: