stevy Temat założony przez niniejszego użytkownika |
tablica wskaźników » 2015-09-03 21:15:58 Witam, pytanie dotyczy przekazywania tablicy do funkcji. Chodzi o to, że moja tablica zawiera wskaźniki, a do funkcji mogę przekazać jedynie tablicę wartości. Pytanie dotyczy tego, czy istnieje jakiś sposób, oprócz kopiowania jej zawartości do innej tablicy? int * tablica1;
int tablica2[ 20 ];
funkcja( tablica2 );
chodzi głównie o to, że wykonuję tą operację na dość dużej tablicy i sporej ilości obiektów, co strasznie spowalnia program. czy istnieje więc sposób, żeby przekazać wartości z tablicy1 za pomocą wskaźnika bez kopiowania jej zawartości? |
|
carlosmay |
» 2015-09-03 22:21:43 void f( int * spt ) { cout << * spt << ", " << *( spt + 1 ) << ", " << *( spt + 2 ) << endl; } void f2( int t[] ) { cout << t[ 0 ] << ", " << t[ 1 ] << ", " << t[ 2 ] << endl; } void f3( int p[] ) { cout << p[ 0 ] << ", " << p[ 1 ] << ", " << p[ 2 ] << endl; } void f4( int * ppt ) { cout << * ppt << ", " << *( ppt + 1 ) << ", " << *( ppt + 2 ) << endl; } int main() { int * pt; int tab[ 3 ] = { 3, 4, 6 }; pt = tab; f( pt ); f2( pt ); int tab2[ 3 ] = { 11, 22, 33 }; int * ppt[ 3 ]; * ppt = tab2; f3( * ppt ); f4( * ppt ); _getch(); } Napisałem kilka przykładów. Nie do końca zrozumiałem twój opis. Tablica sama w sobie jest jakby wskaźnikiem i jak przekażesz ją jako wskaźnik możesz odebrać ją jako wskaźnik i działać na arytmetyce wskaźników albo jak na zwykłej tablicy. Twoja wola... Edit: Ustawiasz wskaźnik w wybrane miejsce, przekazujesz wskaźnik, a sposób odbioru w funkcji jest już dowolny (trzeba tylko pamiętać, co wskazuje wskaźnik żeby nie wyjść poza tablicę, bo będzie zonk) |
|
michal11 |
» 2015-09-03 22:36:30 Z tego co zrozumiałem to nie masz innego wyjścia jak kopiowanie, typy muszą się zgadzać. |
|
Monika90 |
» 2015-09-03 22:50:33 Wszystkie tablice można przekazać przez wskaźnik, nie ważne co zawierają |
|
carlosmay |
» 2015-09-03 23:30:16 void f3( int * p[] ) { cout << * p[ 0 ]; cout << ", " << * p[ 1 ]; cout << ", " << * p[ 2 ] << endl; } void f4( int ** ppt ) { cout << ** ppt; cout << ", " << **( ppt + 1 ); cout << ", " << **( ppt + 2 ); cout << endl; } int main() { int * p1, * p2, * p3; int a, b, c; a = 5; b = 6; c = 3; p1 = & a; p2 = & b; p3 = & c; int * ppt[ 3 ]; ppt[ 0 ] = p1; ppt[ 1 ] = p2; ppt[ 2 ] = p3; f3( & ppt[ 0 ] ); f4( & ppt[ 0 ] ); _getch(); } Tablica wskaźników do funkcji na dwa sposoby. |
|
Monika90 |
» 2015-09-03 23:45:58 void f3( int * p[] ); void f4( int ** ppt );
|
Tak naprawdę jest to jeden sposób, bo w deklaracji parametrów funkcji T a[] znaczy dokładnie to samo co T * a |
|
carlosmay |
» 2015-09-03 23:48:18 Tak. Chodziło tylko o formę zapisu. Misi być to samo skoro daje te same efekty. ;) |
|
stevy Temat założony przez niniejszego użytkownika |
» 2015-09-04 09:31:35 Napiszę inaczej. Mam tablicę wskaźników, z której to wartości skrywane pod adresami muszę przekazać do shadera. GLSL potrzebuje wskaźnika na pierwszy element tablicy z danymi, zaś moja tablica składa się ze wskaźników na te dane i jedynym wyjściem wydaje się mi kopiowanie jej zawartości do innej, co jest strasznie powolne. Dlatego pytam czy jest możliwe jakimś sposobem przekazanie tych danych bez kopiowania int tablica[ 10 ]; glUniform1iv( uchwyt, 10 , tablica );
vector < int > tablica; glUniform1iv( uchwyt, tablica.size(), & tablica[ 0 ] );
int * tablica1;
int tablica2[ 10 ]
glUniform1iv( uchwyt, 10, tablica2 );
|
|
« 1 » 2 |