Witam .
Chodzi mi jak zadeklarować tablicę w której nie wiem ile będzie elementów. Podobno jest to tablica dynamiczna.
Chodzi mi jak zadeklarować tablicę w której nie wiem ile będzie elementów. Podobno jest to tablica dynamiczna.
Do you prefer the English version of the page elektroda?
No, thank you Send me over therechar *pointer;
pointer=new char[10]; //deklaruje 10 zmiennych typu char
pointer[0]=10;
pointer[5]=11;
delete []pointer; //zwalnia zadeklarowana pamięc
tmpat wrote:Dokładnie tak jest, ale wystarczy prosty trick, trzeba zadeklarować wskaźnik do tablicy i zaalokować mu pamięć. O reszte się martwi już system operacyjny, albo przydzieli pamięć albo nie.o ile mi wiadomo to C++ nie ma możliwości zadeklarowania wprost tablicy dynamicznej
Nemo wrote:To wszystko zależy w jakim trybie działa procek, jesli z rzeczywistym to jest ograniczenie do tablic 64kB i tylko sztuczkami matematycznymi i alokacją wielokrotną da się to obejść. A jeśli chodzi o systemy 32bit takie jaki linux czy windows (chyba od 98 w góre). To można chyba zaalokować do 4GB pamięci (w linuxie 3GB, bo reszta jest dla jądra, żeby nie trzeba było przełączać segmentów przy dostępie do jądra). To wszystko to jest dopiero potem mapowane na pamięc fizyczną przez system operacyjny, ale z punktu widzenia programy te 4GB to jest ciągły obszar pamięci i tam można deklarować tablice.Liczyłem na wypowiedź h-doc w tym temacie z alokacją.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//---------------------------------------------------------------------------
#pragma argsused
int **tablica;
void create(int x, int y);
void erase(int x,int y);
void showing(int x, int y);
void input(int x, int y);
void main()
{
int x,y,x1,y1;
cout<<"TABLICA DYNAMICZNA\n\n\n\n";
cout<<"Podaj rozmiar tablicy [x,y]\nX:";
cin>>x;
cout<<"Y:";
cin>>y;
create(x,y);
cout<<"\nPRESS ANY KEY\n\nTable is created\n";
getch();
showing(x,y);
getch();
cout<<"\nUstawianie pamięci\n";
getch();
input(x,y);
showing(x,y);
getch();
cout<<"\nPodaj wspolrzedne elementu ktory chcialbys zobaczyc\n";
cout<<"X:";
cin>>x1;
cout<<"Y:";
cin>>y1;
cout<<"Element tej tablicy to: "<<tablica[x1-1][y1-1];
cout<<"\n\nA teraz kasowanie pamieci\n";
getch();
erase(x,y);
cout<<"Kasowanie\n";
getch();
cout<<"PRESS ANY KEY\n\nTable is deleted";
}
void create(int x, int y)
{
tablica = new int *[y-1];
for (int i=0; i<x;i++)
tablica[i]= new int [x-1];
}
void erase(int x,int y)
{
//tablica = new int *[y-1];
for (int i=0; i<x;i++)
delete [] tablica[i];
delete [] tablica;
//free(tablica);
}
void showing(int x, int y)
{
for (int i=0;i<y;i++)
{
cout<<"\n"<<i<<". ";
for (int k=0;k<x;k++)
cout<<tablica[k][i]<<" ";
}
}
void input (int x, int y)
{
for (int i=0;i<y;i++)
for (int k=0;k<x;k++)
{
tablica[k][i]=random(5);
}
}