Mam pytanie teoretyczne. We wszelkich poradnikach i kursach mówi się, że wskaźniki służą między innymi do dynamicznego tworzenia wielkości tablicy (np. użytkownik podaje na początku rozmiar tablicy). Dlaczego nie można tego wykonywać przy zwykłym deklarowaniu tablic jak poniżej:
#include <iostream>
using namespace std;
int main()
{
int liczba;
cout<<"Podaj wielkosc tablicy:";
cin>>liczba;
int tab[liczba];
for(int i=0; i<liczba ; i++) // Uzupełniam tablicę liczbami od 0 do liczba-1
tab[i]=i;
for(int i=0; i<liczba ; i++) // Wypisuję tablicę dla sprawdzenia
cout<<tab[i]<<endl;
return 0;
}
Poniżej zamieszczam ten sam problem przy użyciu wskaźników:
#include <iostream>
using namespace std;
int main()
{
int liczba;
cout<<"Podaj wielkosc tablicy:";
cin>>liczba;
int *tab = new int [liczba];
int *pom = new int;
pom = tab;
for(int i=0; i<liczba ; i++)// Uzupełniam tablicę liczbami od 0 do liczba-1
{
*tab=i;
tab++;
}
tab = pom; //Przywracam wskaznik tab na poczatkowe polozenie
for(int i=0; i<liczba ; i++) // Wypisuję tablicę dla sprawdzenia
{
cout<<*tab<<endl;
tab++;
}
delete [] tab; // Zwalniam zarezerwowana na tablice pamiec
delete pom;
return 0;
}
Jedyną różnicą, którą ja zauważam jest zwalnianie zarezerwowanej pamięci za pomocą delete przy użyciu wskaźników. Moje pytanie jest takie czy deklarowanie tablicy za pomocą pierwszego sposobu bez użycia wskaźników jest błędem? Prosiłbym również o kila słów wyjaśnienia dlaczego przy deklarowaniu wielkości tablicy przez użytkownika zazwyczaj używa się wskaźników a nie pierwszej zapisanej przez mnie metody.
Z góry dzięki za odpowiedź.