Jak Przekazać Tablicę Do Funkcji?

Spisu treści:

Jak Przekazać Tablicę Do Funkcji?
Jak Przekazać Tablicę Do Funkcji?

Wideo: Jak Przekazać Tablicę Do Funkcji?

Wideo: Jak Przekazać Tablicę Do Funkcji?
Wideo: Programowanie Cpp #19 tablice i funkcje 2024, Może
Anonim

Macierze są jedną z najczęściej używanych form ustrukturyzowanego przechowywania danych w programach komputerowych. Ich przetwarzanie może odbywać się za pomocą różnych algorytmów zaimplementowanych w metodach i funkcjach klas. W związku z tym często wymagane jest przekazanie tablicy do funkcji. Języki C i C++ dają dużą swobodę w doborze metod wykonywania tej czynności.

Jak przekazać tablicę do funkcji?
Jak przekazać tablicę do funkcji?

Czy to jest to konieczne

kompilatory języków C i C++

Instrukcje

Krok 1

Przekaż do funkcji tablicę o stałym rozmiarze. Zmień prototyp funkcji tak, aby zawierał argument odpowiedniego typu. Na przykład deklaracja funkcji, która przyjmuje jako parametr tablicę całkowitych wartości liczbowych trzech elementów, może wyglądać tak:

void ArrayFunction (int aNumbers [3]);

Taka funkcja jest wywoływana przez przekazanie tablicy bezpośrednio do niej jako argumentu:

nieważna jakaś funkcja ()

{

int aLiczby = {1, 2, 3};

Funkcja tablicy (liczby);

}

Przesyłane dane są kopiowane na stos. Modyfikacja tablicy w wywoływanej funkcji nie zmienia źródła.

Krok 2

Przekaż do funkcji tablice o zmiennej długości. Aby to zrobić, po prostu nie określaj wymiaru odpowiedniego argumentu:

void ArrayFunction (int aNumbers );

Tablice wielowymiarowe można również przekazywać w podobny sposób (tylko pierwszy „wymiar” może być zmiennym):

void ArrayFunction (int aNumbers [3] [2]);

Funkcje te są wywoływane w taki sam sposób, jak w pierwszym kroku.

Aby móc poprawnie przetwarzać tablice o zmiennej długości w funkcji, należy albo jawnie przekazać liczbę ich elementów przez dodatkowy parametr, albo zastosować konwencje, które nakładają ograniczenia na wartości samych elementów (określona wartość musi być znakiem końca tablicy).

Krok 3

Przekaż tablicę za wskaźnikiem. Argument funkcji musi być wskaźnikiem do wartości o typie odpowiadającym elementom tablicy. Na przykład:

void ArrayFunction (int * pNumbers);

Dostęp do danych w funkcji może być realizowany zarówno w notacji do pracy z elementami tablicy, jak i za pomocą arytmetyki adresowej:

void ArrayFunction (int * pNumbers)

{

pLiczby [0] = 10; // dostęp do elementu 0

* (pNumbers + 1) = 20; // dostęp do pozycji 1

}

Bądź ostrożny! Ponieważ do funkcji nie jest przekazywana kopia danych, ale wskaźnik do niej, oryginalna tablica zostanie zmodyfikowana.

Zaletą tej metody jest szybkość, oszczędność zasobów obliczeniowych oraz pewna elastyczność. Możesz więc wywołać funkcję docelową, przekazując jej wskaźnik do dowolnego elementu tablicy:

nieważna jakaś funkcja ()

{

int aLiczby = {1, 2, 3};

Funkcja tablicy (liczby); // cała tablica

Funkcja tablicy (i liczby [1]); // zaczynając od drugiego elementu

}

Ta metoda również zwykle polega na przekazaniu liczby dostępnych elementów w dodatkowym parametrze lub użyciu terminatora tablicy.

Krok 4

Przekaż dane do funkcji z parametrem będącym obiektem lub odwołaniem do obiektu klasy, która implementuje funkcjonalność tablicy. Takie klasy lub szablony klas zazwyczaj można znaleźć w popularnych bibliotekach i frameworkach (QVector w Qt, CARray w MFC, std:: vector w STL itp.).

Często te klasy implementują niejawną strategię udostępniania danych ze zliczaniem odwołań, wykonując głęboką kopię tylko wtedy, gdy dane są modyfikowane (kopiowanie przy zapisie). Pozwala to zminimalizować zużycie zasobów obliczeniowych nawet w przypadku przekazywania obiektów tablicowych po wartości przez argumenty funkcji i metod:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

nieważna jakaś funkcja ()

{

QVector oArray (10);

dla (int i = 0; i

Zalecana: