wyświetlanie tablicy za pomocą wskaźników

0

Czy da się w taki sposób wyświetlić tablicę dynamiczną

void pokaz_tablice(element** tab, int k)
{
    int i=0;
    int j=0;
    while(tab+i!=NULL)
    {
        for(int j=0; j<k; j++)
        cout<<(*(tab+i)+j)->rok<<" ";
        cout<<endl;
        i++;
    }
} 

oczywiście tablica jest zadeklarowana, i da się wyświetlić za pomocą zwykłej instrukcji. Poza tym, tablica zostanie pokazana, lecz program się ścina. Pytanie zadane z czystej ciekawości. Element to struktura z pole rok jako int i kilkoma innymi polami.

P.S. Próbowałem podejrzeć adresy wskaźników, i są wyświetlane bez końca kolejne adresy pamięci.

0
#include <iostream>
#include <cstdlib>
#include <ctime>

struct Data {
    int i;
};

void print_arr(Data** arr, int x, int y) {
    for (int i = 0; i < x; ++i) {
        for (int j = 0; j < y; ++j) {
            std::cout << arr[i][j].i << " ";
        }
        std::cout << "\n";
    }
}

int main() {
    srand(time(0));
    int x = 5, y = 7;
    Data** arr = new Data*[x]; 
    for (int i = 0; i < x; ++i) {
        arr[i] = new Data[y];
    }
    
    for (int i = 0; i < x; ++i) {
        for (int j = 0; j < y; ++j) {
            arr[i][j].i = rand() % 150;
        }
    }
    
    print_arr(arr, x, y);

    for (int i = x - 1; i >= 0; --i) {
        delete [] arr[i];
    }
    delete [] arr;
    return 0;
}
0

właśnie nie chodzi o wyświetlenie tablicy dwoma forami. nie chce mu podawać ilości wierszy i kolumn, tylko same kolumny. po wierszach ma przechodzić za pomocą wskaźników i operacji na nich, jedynie po kolumnach musi iść forem, bo nie ma innej możliwości. więc pytanie jest nadal aktualne.

0

Jaką masz pewność, że akurat po Twoich adresach będzie zero? (Twój kod #5) Nie masz jej, chyba że sam je tam umieścisz.

#include <iostream>

void loop_arr(int** a, int y) {
    int i = 0;
    while (a[i] != NULL) {
        std::cout << "a[" << i << "] = [ ";
        for (int j = 0; j < y; ++j) {
            std::cout << a[i][j] << " ";
        }
        std::cout << "]\n";
        ++i;
    }
}

int main() {
    int x = 3;
    int y = 2;
    int** a = new int*[x];
    a[0] = new int[y];
    a[1] = new int[y];
    a[2] = 0;
    
    a[0][0] = 1;
    a[0][1] = 2;
    a[1][0] = 3;
    a[1][1] = 4;
    
    
    loop_arr(a, y);
    
    for (int i = 0; i < x; ++i) {
        delete [] a[i];
    }
    delete [] a;
    
    return 0;
}

Ale szczerze mówiąc, troszkę mi wstyd za taki kod. :P Czemu nie użyć vector-ów? One przynajmniej pamiętają swój własny rozmiar. ;) I są naprawdę szybkie, jeśli się kompiluje z włączonymi optymalizacjami.

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