W tym artykule opiszę w jaki sposób przekazujemy tablicę do wnętrza funkcji poprzez jej argumenty. Omówię tablice jedno i wielowymiarowe:
Na wstępie chcę zauważyć, że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Oznacza to, że przekazując tablicę jako argument funkcji, będziemy pracować na jej oryginalnym adresie (wszelkie zmiany w modyfikacji tablicy będą widoczne w miejscu, gdzie ją stworzyliśmy).
Sposób 1
typ_funkcji nazwa(typ_elementów_tablicy nazwa_tablicy[]);
Można opcjonalnie w nawiasie podać ilość elementów tablicy.
Przykładowa funkcja może wyglądać następująco:
void funkcja(int tablica[10]);
Napisz program, który zamieni wartości tablicy 10 elementowej na ich kwadraty.
#include<iostream>
using namespace std;
void zamiana(int tab[])
{
for(int i=0; i<10; i++)
tab[i]*=tab[i]; //lub tab[i] = tab[i] * tab[i];
}
int main()
{
//inicjacja tablicy
int tablica[10] = {0, 3, 4, 3, 6, 7, 11, -5, -10, 87};
//wypisanie elementów tablicy
for(int i=0;i<10;i++)
cout<<tablica[i]<<" ";
cout<<endl; //wstawienie znaku końca linii (enter)
//wykonanie polecenia
zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
//ponowne wypisanie elementów tablicy
for(int i=0;i<10;i++)
cout<<tablica[i]<<" ";
return 0;
}
0 3 4 3 6 7 11 -5 -10 87 0 9 16 9 36 49 121 25 100 7569
Uwaga!!!. Przekazując tablicę wpisujemy tylko jej nazwę bez nawiasu kwadratowego. |
Sposób 2
typ_funkcji nazwa(typ_elementów_tablicy *nazwa_tablicy);
Drugim sposobem jest przekazanie tablicy poprzez wskaźnik na pierwszy element tej tablicy.
Program będzie się różnił tylko nagłówkiem funkcji:
void zamiana(int *tab)
{
for(int i=0; i<10; i++)
tab[i]*=tab[i]; //lub tab[i] = tab[i] * tab[i];
}
Sposób 1
Pierwszy sposób jest podobny jak w przypadku tablicy jednowymiarowe. Przykład dotyczy tablicy dwuwymiarowej. Tablice o większej liczbie wymiarów przekazujemy podobnie.
Napisz program, który zamieni wartości tablicy dwuwymiarowej o wymiarach 3x3, na ich kwadraty. Tablicę wypełniamy liczbami pseudolosowymi z przedzialu [0..9].
#include<iostream>
using namespace std;
void zamiana(int tab[3][3])
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
tab[i][j]*=tab[i][j]; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
}
int main()
{
//inicjacja tablicy dwuwymiarowej
int tablica[3][3] = {{1, 2, 3}, {4, 5, 6}, {-1, -2, -3}};
//wypisanie elementów tablicy
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cout<<tablica[i][j]<<" "; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
cout<<endl; //wstawienie znaku końca linii (enter)
//wykonanie polecenia
zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
//ponowne wypisanie elementów tablicy
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cout<<tablica[i][j]<<" "; //lub tablica[i][j] = tablica[i][j]*tablica[i][j];
return 0;
}
Przykładowe wyjście:
1 2 3 4 5 6 -1 -2 -3 1 4 9 16 25 36 1 4 9
Sposób 2
Drugi sposób opiera się na utworzeniu tablicy dynamicznej postaci:
typ_tablicy **nazwa_tablicy;
Przeanalizujmy powyższe zadanie rozwiązane tym sposobem:
#include<iostream>
using namespace std;
void zamiana(int **tab)
{
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
tab[i][j]*=tab[i][j]; //lub tab[i][j] = tab[i][j]*tab[i][j];
}
int main()
{
srand(time(NULL)); //ustawienie ziarna
//deklarujemy tablicę dynamicznie
int **tablica = new int *[3];
for(int i=0;i<3;i++)
tablica[i] = new int [3];
//przypisanie do tablicy losowych liczb z przedziału [0..9]
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
tablica[i][j] = rand()%10;
//wypisanie elementów tablicy
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cout<<tablica[i][j]<<" ";
cout<<endl; //wstawienie znaku końca linii (enter)
//wykonanie polecenia
zamiana(tablica); //przekazując tablicę, podajemy tylko jej nazwę
//ponowne wypisanie elementów tablicy
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
cout<<tablica[i][j]<<" ";
return 0;
}
Tablice przydzielane dynamicznie opisane są tutaj.