Kopiowanie zmiennych a tablic poprzez argumenty w funkcjach
Ostatnio zmodyfikowano 2016-01-02 10:11
Erpeg Temat założony przez niniejszego użytkownika |
Kopiowanie zmiennych a tablic poprzez argumenty w funkcjach » 2016-01-01 22:47:44 Witam, czytając tutaj kurs skupiłem się mocno na funkcjach i nie rozumie zależności co się dzieje z argumentami w funkcjach. Pozwolę sobie zacytować fragmenty kodu z poszczególnych części kursów.
Fragment z Poziom 2/Funkcje a slowo kluczowe return Zrozumiałem go w ten sposób, że tablice nie są kopiowane w funkcjach tylko operujemy na oryginalnych danych. int dopisz( int iLiczba, int tablica[], int ile ) { tablica[ ile ] = iLiczba; ile++; return ile; //zwraca ile jest elementów po dodaniu nowego }
int main() { int liczbaElementow = 0; int tablicaLiczb[ 10 ]; wyswietl( tablicaLiczb, liczbaElementow ); liczbaElementow = dopisz( 123, tablicaLiczb, liczbaElementow ); wyswietl( tablicaLiczb, liczbaElementow ); liczbaElementow = dopisz( 321, tablicaLiczb, liczbaElementow ); wyswietl( tablicaLiczb, liczbaElementow ); return 0; }
Tutaj obrazek z Poziom 3 Przekazywanie argumentow funkcji przez referencji Tutaj znowu obrazek przedstawia, że zmienna są kopiowane ale nie operujemy na oryginalnych danych. http://cpp0x.pl/!images/!manual/Kurs-C++/Dzialanie-argumentu-funkcji.png
No i teraz moje pytanie, czy ja coś pominąłem? Czy po prostu tak już jest, że tablice w argumentach zachowują się inaczej niż pojedyńcze zmienne? |
|
Monika90 |
» 2016-01-01 23:55:05 Jeżeli zadeklarujesz parametr funkcji tak: void f(int tablica[]), czy nawet tak: void f(int tablica[114]), to kompilator i tak zamieni sobie tę deklarację na taką void f(int* tablica). Tzn parametr tablica, to nie jest żadna tablica lecz wskaźnik. Najlepiej nie deklarować parametrów postaci Typ nazwa[], od dawna jest to niemodne i wprowadza tylko zamieszanie, i zamiast tego pisać Typ* nazwa (Jeszcze lepiej byłoby w ogóle zrezygnować ze wskaźników i zacząć używać tego co oferuje C++). void f( int tablica[], int ile ) { }
int main() { int tablica[ 114 ]; f( tablica, 114 ); }
|
|
Erpeg Temat założony przez niniejszego użytkownika |
» 2016-01-02 10:11:54 Dziękuje Monika, już rozumiem. Chociaż nie do końca wiem, czemu najlepiej nie używać wskaźników. I co ukryłaś pod zdaniem, że najlepiej wykorzystać to co daje nam C++. |
|
« 1 » |