• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyświetlanie tablicy.

Object Storage Arubacloud
0 głosów
153 wizyt
pytanie zadane 20 kwietnia 2023 w C i C++ przez Zuzan Początkujący (390 p.)

Witam. Mam do napisania następującą funkcję: 

void display(int **ptr);

Funkcja wyświetla w konsoli zawartość poszczególnych wierszy tablicy ptr, bez znaku końcowego. Każdy element tablicy D (pierwszego poziomu) ma znajdować się w oddzielnej linii.

W przypadku podanie niwłaściwych danych funkcja nie podejmuje żadnej akcji.

Przykład dla D:

10 20 30 40 50 60 70 ⏎
100 200 300 400 500 600 700 800 ⏎
1000 2000 3000 4000 5000 6000 7000 8000 9000 ⏎

Kod napisany przeze mnie: 

void display(int **ptr) {
    if(ptr==NULL||*ptr==NULL) return;
    int rows = (int)sizeof(ptr) / sizeof(int*);
    for (int i = 0; i < rows; i++) {
        int* row = *(ptr+i);
        for (int j = 0; *(row+j) != '\0'; j++) {
            printf("%d ", *(row+j));
        }
        printf("\n");
    }
}

Niestety nie działa ta funkcja prawidłowo, nie wiem też czy mój pomysł jest dobry. W jaki sposób mogę sprawdzić ile wierszy i kolumn posiada tablica? Byłabym wdzięczna za wskazówkę.

1 odpowiedź

0 głosów
odpowiedź 20 kwietnia 2023 przez adrian17 Ekspert (344,860 p.)

W jaki sposób mogę sprawdzić ile wierszy i kolumn posiada tablica?

Nie możesz, musisz osobno przekazać rozmiary.

Chyba że wiesz że zarówno tablica wskaźników jak i każda tablica intów kończy się wartością zerową, wtedy możesz się iterować aż trafisz na zero. Ale jak to nie jest spełnione, to musisz po prostu znać rozmiar z zewnątrz.

int rows = (int)sizeof(ptr) / sizeof(int*);

sizeof() mówi tylko o rozmiarze typu. int** i int* mają taki sam rozmiar, więc z definicji `rows` będzie zawsze 1.

BTW, używaj a[b] zamiast *(a+b).

komentarz 20 kwietnia 2023 przez Zuzan Początkujący (390 p.)
No dobrze, to spróbuję z innej strony podejść do tego zadania. Myślałam że jest na to jakiś sposób. Co do zapisu a[b] to zdaje sobie z tego sprawę że tak jest lepiej, jednak zadanie zakazuje używania operatora []. Dziękuję bardzo

Podobne pytania

+2 głosów
1 odpowiedź 410 wizyt
pytanie zadane 5 maja 2023 w JavaScript przez mm Użytkownik (890 p.)
+1 głos
1 odpowiedź 539 wizyt
pytanie zadane 1 grudnia 2021 w PHP przez BarSki13 Obywatel (1,250 p.)
+1 głos
1 odpowiedź 199 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...