Tablica jako argument funkcji

powrót

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 pragnę zauważyć, że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Oznacza to, że przekazując tablicę będziemy pracować na jej oryginalnym adresie (wszelkie zmiany w modyfikacji tablicy będą widoczne w miejscu, gdzie ją stworzyliśmy).

 

Konstrukcja nagłówka funkcji dla tablicy jednowymiarowej
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]);


Zadanie. 1. Napisz program, który zamieni wartości tablicy 10 elementowej na ich kwadraty.

#include<iostream>
#include<cstdlib>
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]<<" ";
        
        cout<<endl;
        
        system("pause");
        
        return 0;
}

 

Wyście:

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.

 

Konstrukcja nagłówka funkcji dla tablicy jednowymiarowej 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];
}

 

Konstrukcja nagłówka funkcji dla tablicy wielowymiarowej
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. Przeanalizujmy zadanie:

Zadanie. 2. 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>
#include<cstdlib>

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];
	
	cout<<endl;
	
	system("pause");
	
	return 0;
}

 

Przykładowe wyjście:

1 2 3 4 5 6 -1 -2 -3 
1 4 9 16 25 36 1 4 9 

 

Konstrukcja nagłówka funkcji dla tablicy wielowymiarowej
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>
#include<cstdlib>
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]<<" "; 
	
	cout<<endl;
	
	system("pause");
	
	return 0;
}

 

Tablice przydzielane dynamicznie opisane są tutaj.