Tablica dynamiczna - różnica w zapisie (wskaźniki)

0

Cześć

Mam pewną zagwozdkę, muszę napisać dosyć prosty program w C++ który stworzy tablicę jednowymiarową o rozmiarze podanym przez użytkownika i wypełni ją wartościami podanymi przez użytkownika. Napisałem coś takiego:

#include <iostream>

using namespace std;
int main()
{
    int tab_1;
    int i;
    cout << "Podaj ilu elementowa ma byc tablica: ";
    cin >> tab_1;

    int tablica[tab_1];

    for (i = 0; i < tab_1; i++)
    {
        cout << "Podaj wartosc " << i+1 << " elementu tablicy: ";
        cin >> tablica[i];
    }

    cout << "\n"<< endl;
    cout << "Wartosci tablicy: ";

    for (i = 0; i < tab_1; i++)
    {
        cout<< tablica[i] << ", ";
    }

    return 0;
}

Program działa poprawnie, ale problem jest w tym, że nie wiem, czy to kwalifikuje się jako tablica dynamiczna. Wiem, że można też stworzyć coś takiego za pomocą wskaźników tylko jakie są różnice między w.w zapisem a zapisem na wskaźnikach? Czy ma to jakiś szczególny wpływ na program?

4

int tablica[tab_1] gdzie tab_1 jest zmienną, jest niepoprawne wg standardu c++. To jest funkcjonalność C99 (https://en.wikipedia.org/wiki/Variable-length_array#C99)

2

Twój kod to też dynamiczna tablica, ale na starszym kompilatorze się nie skompiluje.

Gdy kompilator nie obsługuje tablic z deklaracją rozmiaru w zmiennej, to trzeba to zrobić tak:

#include <iostream>

int main(int argc, char *argv[])
{
    int* my_dynamic_array;

    int size;
    std::cin >> size;

    my_dynamic_array = new int[size];

    for (int k=0; k<size; k++)
        my_dynamic_array[k] = k;

    for (int k=0; k<size; k++)
        std::cout << my_dynamic_array[k] << std::endl;

    delete[] my_dynamic_array;

    return 0;
}
4

Jak chcesz tablicy dynamicznej w C++, użyj po prostu std::vector, zamiast bawić się w new i delete.

0

Wasze odpowiedzi dużo wyjaśniły. Dziękuję i pozdrawiam.

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