C jest uproszczonym językiem. Zapewnia dostęp do „niebieskiego metalu” (sprzętu). Nie ma nawet funkcji czytania z klawiatury ani pisania na ekranie. Jeśli tego potrzebujesz, powinieneś wdrożyć to sam.

Wszystko poza absolutnym minimum znajduje się w bibliotekach.

Znasz bibliotekę stdio. Obsługuje standardowe wejście i wyjście. Istnieją inne biblioteki matematyczne. Przetwarzanie ciągów. Działa z czasem. Istnieją po to, abyś nie musiał wymyślać koła na nowo za każdym razem, gdy rozpoczynasz nowy projekt.

Ale po co poprzestawać na tym, co zapewnia standard?

Umieszczenie kodu w bibliotekach sprawia, że ​​można go ponownie wykorzystać. Pozwala to na podzielenie ogromnych programów na łatwe w zarządzaniu moduły. Łatwiej przetestować. Łatwiejsze debugowanie. Możesz pobrać kod ze starych projektów i wkleić go do nowych bez kopiowania i wklejania bloków logicznych.

Zobaczmy, jak to zrobić.

Ekstrakcja logiki do funkcji

Weźmy standardowy program w C, który wypełnia tablicę liczbami losowymi i je sortuje. Oto kod źródłowy:

Ten kod robi trzy rzeczy. Wypełnia tablicę liczbami losowymi. Sortuje je za pomocą sortowania bąbelkowego. Wyświetla wynik.

Aby utworzyć bibliotekę wielokrotnego użytku, musimy wyizolować logikę sortowania.

Krok pierwszy: uogólnianie sortowania

Wyodrębnij kod sortowania bąbelków. Zmień to w funkcję.

Ponieważ tablica a i stała MAX są globalne, funkcja początkowo nie potrzebuje parametrów. Nie powinna również zwracać wartości. Po prostu użyj zmiennych lokalnych dla x, y i t.

Teraz zaktualizuj main, aby wywołać tę funkcję zamiast wykonywać pętlę wbudowaną.

To działa. Ale nadal jest powiązany z tablicą globalną.

Krok drugi: przekazanie tablicy

Możemy sprawić, że funkcja sortowania będzie naprawdę uniwersalna. Przekaż samą tablicę jako parametr.

Podpis zmieni się na:

Mówi to kompilatorowi, aby zaakceptował tablicę liczb całkowitych o dowolnym rozmiarze. Ciało funkcji pozostaje dokładnie takie samo. Wystarczy zaktualizować wywołanie w main :

Zauważyłeś coś dziwnego? Podajemy a zamiast &a.

Mimo że funkcja sortowania modyfikuje tablicę, nie potrzebujemy tutaj operatora get adres. Wydaje się to sprzeczne z intuicją, jeśli jesteś przyzwyczajony do języków przekazujących wartości. Możesz się zastanawiać, dlaczego to działa bez jawnego użycia wskaźników w wywołaniu.

Dzieje się tak, ponieważ w C tablice stają się wskaźnikami po przekazaniu do funkcji. Funkcja otrzymuje w pamięci odwołanie do początku tablicy. Dlatego może zmienić oryginalne dane.

Zrozumienie tej różnicy jest kluczem do opanowania wskaźników. Bez tego biblioteki C są po prostu statycznymi blokami kodu. Dzięki niemu budujesz modułowe, przenośne systemy.