Thread View: pl.comp.lang.c
6 messages
6 total messages
Started by Witold Przygoda
Fri, 31 Oct 1997 17:42
dynamiczne tablice wielowymiarowe
Author: Witold Przygoda
Date: Fri, 31 Oct 1997 17:42
Date: Fri, 31 Oct 1997 17:42
18 lines
992 bytes
992 bytes
Jeszcze jedno pytanko. Jak wlasciwie zadeklarowac zmienna, zeby osiagnac potem: owaZmienna = new int[n][5]; Gdyby bylo 1-wymiarowe to by bylo po prostu int *owaZmienna; owaZmienna = new int[n]; A jak w powyzszym? (jakos zaden sposob, jaki wyprobowalem, nie dziala... a w ksiazkach ktore mam o dziwo tego nie pisza wprost). Jak sie taki 2-wymiarowy twor kasuje? Zwyklym delete [] owaZmienna; Z gory dzieki, Witek P.
Re: dynamiczne tablice wielowymiarowe
Author: Witold Przygoda
Date: Fri, 31 Oct 1997 19:41
Date: Fri, 31 Oct 1997 19:41
22 lines
984 bytes
984 bytes
Dobra, na to pytanie juz sobie odpowiedzialem... >owaZmienna = new int[n][5]; > >Gdyby bylo 1-wymiarowe to by bylo po prostu > >int *owaZmienna; >owaZmienna = new int[n]; > >A jak w powyzszym? To jakos tak... int **owaZmienna; owaZmienna = new (int*)[5]; for (int i=0; i<5; i++) owaZmienna[i] = new int[n]; wp
Re: dynamiczne tablice wielowymiarowe
Author: Arkadiusz Dabrowski
Date: Sat, 01 Nov 1997 16:00
Date: Sat, 01 Nov 1997 16:00
38 lines
1554 bytes
1554 bytes
On Fri, 31 Oct 1997 19:41:42 GMT, wp@cyberdude.com (Witold Przygoda) wrote:
>
>Dobra, na to pytanie juz sobie odpowiedzialem...
>
>>owaZmienna = new int[n][5];
>>
>>Gdyby bylo 1-wymiarowe to by bylo po prostu
>>
>>int *owaZmienna;
>>owaZmienna = new int[n];
>>
>>A jak w powyzszym?
>
>
>To jakos tak...
>
>
>int **owaZmienna;
>
>owaZmienna = new (int*)[5];
>for (int i=0; i<5; i++) owaZmienna[i] = new int[n];
Zupelnie nie tak. Alokujesz 5 wskaznikow na inta, a nie tablice
wielowymiarowa.
Ma byc tak:
int (*a)[5];
a=new int[n][5]; // jak zamiast 5 napiszesz cos innego, to kompilator
// wglosi niezgodnosc typow (przynajmniej dobry kompilator tak zrobi)
+--\ /--\ +--\ +--\ /--\ | | Arkadiusz Dabrowski
| | | | |--< |--/ | | | | dobrov@priv.onet.pl
+--/ \--/ +--/ | \ \--/ \/ stare konto:
dobrov@zeus.polsl.gliwice.pl
Re: dynamiczne tablice wielowymiarowe
Author: Witold Przygoda
Date: Sat, 01 Nov 1997 18:12
Date: Sat, 01 Nov 1997 18:12
109 lines
3635 bytes
3635 bytes
dobrov@friko.onet.pl (Arkadiusz Dabrowski) wrote:
>>int **owaZmienna;
>>
>>owaZmienna = new (int*)[5];
>>for (int i=0; i<5; i++) owaZmienna[i] = new int[n];
>
>Zupelnie nie tak. Alokujesz 5 wskaznikow na inta, a nie tablice
>wielowymiarowa.
>
>
>Ma byc tak:
>
>int (*a)[5];
>a=new int[n][5]; // jak zamiast 5 napiszesz cos innego, to kompilator
> // wglosi niezgodnosc typow (przynajmniej dobry kompilator tak zrobi)
Moje rozwiazanie nie jest w sensie scislym tablica 2-wymiarowa, bo
najpierw mam niejako wskazniki do 5 rzedow, ktory potem kazdy z nich
dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a
potrzebowalem owaZmienna[n][5]; gdzie n - daje jako dana z zewnatrz.
Dziala.
Poza tym znalazlem na i-necie jeszcze pare innych rozwiazan, np.:
int **AllocateCont2dArray(int rows, int cols)
{
int **m, *data;
int i;
m = new (int*)[rows] // Array of pointers to the rows.
data = new int[rows*cols] // Allocate a contiguous section of
memory
// for the whole matrix.
for(i = 0; i < rows; i++)
m[i] = &data[i*cols]; // `Connect' each row pointer to the
correct
// location in the 1D array
return(m);
}
albo (tu przytocze cala liste...........)
TITLE: Allocating multidimensional arrays
I have declared:
double multiarray[][1000] ;
and now want to allocate storage. What is the proper syntax for a
'new'
statement allocating space for a [16][1000] array? The C++ faq
doesn't
seem to have anything on multidimensional arrays.
.............................................................................
Try this:
double **array = new double* [sizeof(double*) * rows];
array[0] = new double [sizeof(double) * rows * columns];
for (int i = 1; i < rows; i++)
array[i] = array[0] + i * columns;
Where array is list of pointers to the beginning of each row.
Now you can just write array[i][j] to reference the elements.
.............................................................................
typedef double dmill[1000];
dmill *multiarray=new dmill[16];
.............................................................................
The final solution to my problem was:
double (*mutiDimArrayPtr)[1000];
.
.
.
mutiDimArrayPtr = new double[16][1000] ;
p.s. I think some info on multidimensional arrays belongs in the FAQ.
This stuff is not simple!
.............................................................................
Never try something complicated when you can simplify it.
NEVER instantiate multidimeniosnal arrays.
USE A TYPEDEF.
typdef int i3[3];
typdef i3 i35[5];
i35*p=new i35[7];
No confusion here. There are 7 i35 objects, each is 5 i3 objects
each of which is an array of 3 integers.
Pozdrawiam i dzieki za odzew, wp
Re: dynamiczne tablice wielowymiarowe
Author: Witold Przygoda
Date: Sat, 01 Nov 1997 19:45
Date: Sat, 01 Nov 1997 19:45
13 lines
978 bytes
978 bytes
wp@cyberdude.com (Witold Przygoda) wrote: >dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a >potrzebowalem owaZmienna[n][5]; gdzie n - daje jako dana z zewnatrz. >Dziala. Sorry: mialo byc - owaZmienna[5][n]; wp
Re: dynamiczne tablice wielowymiarowe
Author: Maciej Malycha
Date: Sat, 22 Nov 1997 00:00
Date: Sat, 22 Nov 1997 00:00
19 lines
1070 bytes
1070 bytes
Witold Przygoda <w...@cyberdude.com> napisal byl: > w...@cyberdude.com (Witold Przygoda) wrote: > > >dodaje n kolumn. W efekcie ma cos. czego potrzebowalem, a > >potrzebowalem owaZmienna[n][5]; gdzie n - daje jako dana z zewnatrz. > >Dziala. > > > Sorry: mialo byc - owaZmienna[5][n]; > > wp Nie prosciej zrobic sobie tablice jednowymiarowa i przeliczac indeksy? Chyba, ze to dyskusja akademicka - to przepraszam. -- Maciej mm...@mat.uni.torun.pl (Maciej Malycha)
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads