Pobranie rozmiaru tablicy

0

Mam taką oto tablicę:

int *arr = {1, 2};

Jak mogę pobrać ilość jej elementów? Wyświetlanie sizeof(arr) daje 4, wyświetlenie sizeof(arr)/sizeof(arr[0]) daje 1, sizeof(arr)/sizeof(*arr) też daje 1...

0

WTF?

int* tab = malloc(sizeof(int)*SIZE);

Samego rozmiaru "tablic" na heapie nie da sie pobrac.

1

Wskaźnik NIE JEST TABLICĄ. Tablicę mozesz zrzutować do wskaźnika ale wtedy stracisz dostęp do informacji o rozmiarze. Odpowiadając więc na pytanie: jeśli masz taki kod to nie ma możliwości pobrania ilosci jej elementów.

0

@ktos_komu_zalezy - to oczywiscie pseudokod napisany na szybko, stad brak mallocu : P

@Shalom - skoro to nie jest tablica, to jak inaczej w C utworzyć tablicę o rozmiarze zależnym od jakiejś zmiennej...?

Ta tablica zawiera tylko cyfry z przedziału <0, 9> - można policzyć elementy w whilu sprawdzającym czy cyfry są w tym przedziale? (bo odwołanie do nieistniejącego elementu chyba zwraca jakąś zupełnie losową liczbę).

0

Nie da się. W przypadku dynamicznej alokacji pamięci nie operujesz na żadnych "tablicach" tylko na blokach pamięci. To że możesz po tej pamięci jeździć za pomocą [i] to jest słodzik syntaktyczny - ot kompilator wiedząc ile bajtów mają zmienne danego typu potrafi policzyć sobie pod jaki adres w pamięci skoczyć. Musisz po alokacji pamieci zapisać sobie gdzieś rozmiar i tyle. Skoro to C++ to zrób sobie klasę która przechowa wskaźnik do tablicy i jej rozmiar. Albo użyj vector<>
Takie jeżdżenie o którym mówisz jest ryzykowne. C/C++ nie sprawdza poprawności takiego odwołania i możesz sobie tak czytać, ale:

  • nie masz pewności kiedy wyjedziesz poza zakres (tzn zauważ że w pamieci "za" twoim blokiem pamięci też mozesz mieć liczby 0..9)
  • program przy odwołaniu poza zakres pamięci może się wysypać zwyczajnie ;] Zwykle raczej przy zapisie niż przy odczycie ale nigdy nie wiesz ;]
0

Nie mozna w zaden sposob tego policzyc bo nie wiesz co sie bedzie znajdowac za "tablica".
Po prostu trzymaj gdzies rozmiar w zmiennej i tyle.

0

Hehe, dzięki za odpowiedzi, moim problemem jest to, że alokuję trochę więcej pamięci niż będzie potrzeba, bo nie wiem ile dokładnie mam zaalokować (to program dodający dwie liczby ze stosów, nie wiadomo czy będzie overflow, czy XX + XX = XXX, czy XX + XX = XX, itp...).

0

XX+YY=CZZ
gdzie C jest zero albo cyfra.

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