Nazgul Temat założony przez niniejszego użytkownika |
Przekazanie danych do funkcji (analogicznie do przesyłania napisu) » 2017-01-24 16:12:28 Napiszę najpierw dwa przykłady 1: void foo( const char * napis ) { printf( "%s", napis ); delete[] napis; }
int main() { foo( new char[ 12 ] { 'a', 'l', 'a', ' ', 'm', 'a', ' ', 'k', 'o', 't', 'a', '\0' } ); system( "pause" ); return 0; }
2: void foo( const char * napis ) { printf( "%s", napis ); }
int main() { foo( "Ala ma kota" ); system( "pause" ); return 0; }
Przykład 1: trzeba ręcznie usunąć pamięć tablicy. Przykład 2: kompilator automatycznie usuwa pamięć tablicy. Następny przykład(podobny do przykładu nr 1: void foo( const int * dane ) { int suma = 0; for( unsigned int i = 0; dane[ i ] != 0; i++ ) suma += dane[ i ]; printf( "%i", suma ); delete[] dane; }
int main() { foo( new int[ 5 ] { 1, 8, - 2, 4, 0 } ); system( "pause" ); return 0; }
Czy jest sposób, żeby w podobny sposób do przykładu nr 2 przesłać tablice np. intów? |
|
carlosmay |
» 2017-01-24 16:21:11 |
|
Nazgul Temat założony przez niniejszego użytkownika |
» 2017-01-24 17:37:49 Naprawdę, to że pytanie jest z wiedzy podstawowej, nie znaczy że ktoś nie potrafi podstaw. Przeczytałem cały artykuł i tam nie ma nic wspomnianego o tym o co pytałem. Chodzi o samą wygodę w wywoływaniu funkcji. Zapis foo( new int[ 5 ] { 1, 2, 3, 4, 5 } ); foo( new char[ 12 ] { 'a', 'l', 'a', ' ', 'm', 'a', ' ', 'k', 'o', 't', 'a', '\0' } );
jest o tyle zły, że a) używa operatora new, przez co sprawia wrażenie jakby był wyciek pamięci b) wydaje się że można do tablicy przekazać tablicę statyczną c) w momencie jak się utworzy dynamiczną tablicę, którą dopiero potem się prześle do funkcji, to funkcja ją usuwa. dlatego żeby czytelność kodu była dobra, jeżeli jest jakiś sposób typu foo( int { 1, 2, 3, 4, 5 } );
foo( "Ala ma kota" );
to będę bardzo wdzięczny za odpowiedź |
|
jankowalski25 |
» 2017-01-24 17:52:17 |
|
Nazgul Temat założony przez niniejszego użytkownika |
» 2017-01-24 18:29:18 Super!:) Dziękuję
A tak jeszcze się dodatkowo spytam, jak twórcy tej biblioteki sprawili, że kompilator rozumie taki zapis ("foo({.., .., ..,});")? Ostatnio mocno interesuje mnie abstrakcją w programowaniu, tworzeniem w pewien sposób interfejsu dla programisty w taki sposób, żeby nie miał żadnych wątpliwości jak się tego używa. |
|
jankowalski25 |
» 2017-01-24 18:44:10 jak twórcy tej biblioteki sprawili, że kompilator rozumie taki zapis |
To jest w standardzie, ręcznie (chyba) się takich rzeczy samemu nie zrobi. Dopisano:Jednak da się, ale składnia jest nieco mniej wygodna. Trzeba napisać własną klasę i przeciążyć odpowiednie operatory (między innymi operator , ). Wtedy wywołanie funkcji może wyglądać na przykład tak: f(( MyIntegers( 1 ), 2, 3, - 5 ) ); |
|
Nazgul Temat założony przez niniejszego użytkownika |
» 2017-01-24 18:59:58 Dziękuję bardzo za pomoc Wooo Teraz, po dopisce "jednak da sie..." już tak bardzo bardzo dziękuję za pomoc, to jest właśnie to czego szukałem!;D |
|
« 1 » |