Witam,
mam dwa pytania odnośnie tej części kursu:
1. W pierwszej części (dynamiczna alokacja pamięci) zastanawia mnie jedno - chcemy zarezerwować konkretną wartość komórek w pamięci dla tabeli. Ale nie do końca rozumiem, czym się różni użycie wskaźnika od zwykłego wywołania ilości danych w tabeli ( cin >> n) i potem jej utworzenie ( tab[n] ). To nie działa tak samo, że rezerwuje miejsca w pamięci dla tylu komórek, ile poda użytkownik?
2. W drugiej części nie działa mi program, jaki jest przedstawiany na filmie. Dla sprawdzenia pobrałem kod źródłowy. Jak to u mnie wygląda? Otóż najpierw kiedy chcę zmierzyć czas operacji dla tablicy bez wskaźnika, to po wpisaniu liczby komórek program wysiada. Ściągnąłem kod źródłowy, tam za linią delete [] tablica; jest jeszcze jedna linia tablica = NULL (której chyba nie ma w filmie). Po jej wpisaniu wszystko działa... ale jednak nie do końca.
Kiedy dochodzi porównanie, czyli dopisuje operacje na tablicy z wskaźnikiem, to już nie działa jak powinno - czas liczy się ok dla tablicy bez wskaźnika i potem się wysypuje, niezależnie czy przy drugim pomiarze na końcu jest tablica = NULL czy nie. Dla urozmaicenia, kod źródłowy, absolutnie nieruszany, też nie działa. Co jest nie tak?
Dziękuje za wszystkie odpowiedz, pozdrawiam!
EDIT: Wstawiam kod źródłowy, o którym mowa powyżej. :)
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int ile;
clock_t start, stop;
double czas;
int main()
{
cout << "Ile liczb w tablicy: ";
cin>>ile;
//dynamiczna alokacja tablicy
int *tablica;
tablica=new int [ile];
//zacznij odliczac czas
start = clock();
//wczytywanie liczb do tablicy
for (int i=0; i<ile; i++)
{
tablica[i]=i;
tablica[i]+=50;
}
stop = clock();
czas = (double)(stop - start) / CLOCKS_PER_SEC;
cout<<"Czas zapisu (bez wskaznika): "<<czas<<" s"<<endl;
delete [] tablica;
//ponowna alokacja tablicy
tablica=new int [ile];
int *wskaznik=tablica;
//zacznij odliczac czas
start = clock();
//wczytywanie liczb do tablicy
for (int i=0; i<ile; i++)
{
*wskaznik = i;
*wskaznik+=50;
wskaznik++;
}
stop = clock();
czas = (double)(stop - start) / CLOCKS_PER_SEC;
cout<<"Czas zapisu (ze wskaznikiem): "<<czas<<" s";
delete [] tablica;
return 0;
}