Dakle pozdrav MetalGenius, Welcome :)
Haha i ja sam od basica poceo XD, ovo o cemu ti govoris je alociranje memorije. Dakle statičko alociranje memorije je ovo sto si navela sa
(int a[10]) kod ovako alocirane memorije velicina polja se ne moze mijenjati tjekom izvršavanja programa, također ovako alocirano polje se alocira na staku pa se brise nakon izvršavanja funkcije u kojoj je i alocirana. Sa druge strane je dinamički alocirana memorja, čija se veličina može mijenjati prilikom izvršavanja, ovako alocirana memorija se alocira na heap-u i brise ju sam korisnik. Dakle sve sto imamo u memoriji ima svoju neku lokaciju, tzv pokazivačima mi i možemo i pristupati odgovarajućim lokacijama. Upravo sa pokazivačima mi možemo i dodjeliti odgovarajući prostor tjekom izvršavanja programa, a to je upravo ono sto tebi treba. To nam omogućava naredba
new koji alocira polje određene veličine na stacku u vraća pokazivač na to polje. To bi u c++ bilo nekako ovako:
Code:
#include <iostream>
using namespace std;
int main () {
int *p, n, i;
cout << "Koliko zelite polje ";
cin >>n;
p = new int[n];
for (i = 0;i<n;i++) {
cout << "Unesite " << i+1 << " broj: ";
cin >> *(p+i); //ili alternativno p[i] samo sam htio demonstrirati operator * koji sa lokacije čita vrijednost
}
for (i = 0;i<n;i++) {
cout << "Broj : " << p[i] << endl;
}
delete [] p; // na kraju najbitije od svega je pobrisati alocirano polje uvijek !!!
system("pause");
}
Dakle razlika između ova dva nacina alociranja je u scope-u (zivotnom vijeku) varijable koja je alocirana ono sto smo staticki alocirali brise se tek nakon sto se program zavrsi, a kod dinamički alociranog polja brisemo ga mi tijekom izvođenja samog programa pozivanjem operatora delete. ;D