Strona 1
[lekcja] Przekazywanie tablic jednowymiarowych do funkcji | Kurs C++ » Poziom 2
2011-11-12 17:10:40
http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Przekazywanie-tablic-jednowymiarowych-do-funkcji/324
Darmowe kursy Online
»
Kurs C++
»
Poziom 2
Autor: Piotr Szawdyński
Przekazywanie tablic jednowymiarowych do funkcji
[lekcja]
Rozdział 19. Niniejszy rozdział pokazuje podstawowe techniki przekazywaniatablic jednowymiarowychdo funkcji.
Jeżeli starałeś się intensywnie wcielić w życie plan pisania kodu wykonanego w oparciu o funkcje to z pewnością natrafiłeś na czynny
opór kompilatora w chwili gdy chciałeś przekazać tablicę do funkcji. Być może doszedłeś do jednego z możliwych rozwiązań , tj. sposobie
przekazywania tablicy jako argument do funkcji bądź znów ktoś podsunął Ci niezbyt trafiony pomysł ze zmiennymi globalnymi. Zmienne
globalne to zło wcielone, które oczywiście ma swoje uzasadnione miejsce w przyrodzie, jednak dowiesz się o nim znacznie później - na
chwilę obecną nie masz tego znać, a nawet jeżeli już je znasz to masz całkowity zakaz ich używania. Dlaczego? Żebyś się nauczył
programować, a nie rozwiązywać problemy metodą buta w drzwiach.
Przekazywanietablicy jednowymiarowejdo funkcji
W C++ mamy do dyspozycji kilka form zapisu przekazywania tablic do funkcji. W niniejszym rozdziale poznamy trzy sposoby zapisu
osiągnięcia naszego celu. Zapisy, które zostaną przedstawione są względem siebie równoważne, a więc można ich używać zamiennie.
Zapisy te wyglądają następująco:
C/C++
void
sposob_1
(
int
tablica
[
123
] )
;
void
sposob_2
(
int
tablica
[] )
;
void
sposob_3
(
int
*
tablica
)
;
Jeżeli wykazałeś się kreatywnością rozwiązując zadanie z poprzedniego rozdziału to prawdopodobnie wystąpił w nim zapis, który
występuje w funkcji sposob_1, tj.
int
tablica
[
123
]
, gdzie 123 to liczba elementów w tablicy. Z punktu widzenia funkcji znajomość
liczby elementów dla tablic jednowymiarowych jest zbędna. Wspomniany zapis zadziała więc tak samo jak zapis
int
tablica
[]
, który
informuje kompilator jak również programistę o przekazywaniu tablicy do funkcji. Ostatni zapis natomiast mówi, że jest to wskaźnik na
zmienną - szczegółów na chwilę obecną nie musisz znać. Jedyne co Ciebie powinno teraz interesować to fakt, że zapis ten jest również
równoważny do wcześniej omówionych.
Kompilator wszystkie omówione zapisy zinterpretuje jako wskaźnik. Wskaźnik w rzeczywistości jest liczbą, która wskazuje na pierwszą
komórkę pamięci zawierającą dane. Na chwilę obecną szczegółów nie musisz znać - zostaną one omówione w dalszej części kursu.
Dane tablicy w funkcjach
Tablice przekazywane do funkcji nigdy nie są kopiowane. Oznacza to, że w funkcji masz bezpośredni dostęp do danych, które
znajdują się w tablicy. Modyfikacja danych jest globalna, bowiem pracujesz na oryginalnych danych tablicy, która została przekazana do
funkcji.
Przykład
Zobaczmy teraz jak wyglądać będzie przekazywanie tablicy do funkcji w praktyce:
C/C++
#include <iostream>
void
wypelnijTablice
(
int
t
[]
,
int
iRozmiar
)
{
std
::
cout
<<
"Podaj "
<<
iRozmiar
<<
" liczb:"
<<
std
::
endl
;
int
i
=
0
;
do
{
std
::
cin
>>
t
[
i
]
;
i
++
;
}
while
(
i
<
iRozmiar
)
;
}
int
main
()
{
int
moja_tablica
[
5
]
;
wypelnijTablice
(
moja_tablica
,
5
)
;
int
i
=
0
;
Strona 2
[lekcja] Przekazywanie tablic jednowymiarowych do funkcji | Kurs C++ » Poziom 2
2011-11-12 17:10:40
http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Przekazywanie-tablic-jednowymiarowych-do-funkcji/324
Architektserwisu: Piotr Szawdyński
© Wszelkieprawa zastrzeżone2005-2011
do
{
std
::
cout
<<
moja_tablica
[
i
] <<
", "
;
i
++
;
}
while
(
i
<
5
)
;
return
0
;
}
Powyższy przykład powinien być dla Ciebie już na tyle prosty, że efekt działania powyższego programu powinien być dla Ciebie do
przewidzenia . Dalej pozostaje Ci tylko ćwiczyć, ćwiczyć i jeszcze raz ćwiczyć.
Pamiętaj, że zmienna o nazwie moja_tablica nie jest widoczna z poziomu funkcji wypelnijTablice, jak również zmienna t nie jest
widoczna wewnątrz funkcji main. Dostęp do tablicy moja_tablica w funkcji wypelnijTablice posiadasz poprzez zmienną t.
Powinieneś to już wiedzieć ze wcześniejszego rozdziału poświęconego funkcjom.
Zadanie domowe
Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je
i wynik wypisze na ekran. Wszelkie operacje mają zostać zrealizowane w oparciu o funkcje. Tablica ma być zadeklarowana w funkcji
main
. Oczekiwane funkcje:
Wypełnienie tablicy o podanym rozmiarze losowymi liczbami z przedziału podawanego przez argumenty funkcji.
Sumowanie określonej ilości liczb znajdujących się w tablicy i zwrot wyniku.
Wypisywanie zawartości tablicy.
Przykładowa implementacja funkcji main:
C/C++
int
main
()
{
int
tablica
[
999
]
;
wylosujLiczby
(
tablica
,
999
,
4
,
10
)
;
wypiszLiczby
(
tablica
,
999
)
;
int
iSuma
=
obliczSume
(
tablica
,
999
)
;
std
::
cout
<<
"Suma liczb wynosi: "
<<
iSuma
<<
std
::
endl
;
return
0
;
}
Wszystkieteksty są chronioneprawami autorskimi. Kopiowanielub rozpowszechnianietreści poza niniejszymserwisem jest
zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechnianiawłasnego tekstu wedle własnego uznania.