Wstęp
- 2977
- 735
- Juliusz Sienkiewicz
Zgodnie z obietnicą, poczynając od tej części naszego artykułu w rozwoju C, zaczniemy od nauki, bez dalszego wprowadzenia. Nie mogłem znaleźć lepszego sposobu na rozpoczęcie pracy, ponieważ typy, operatorzy i zmienne są istotną częścią C i będziesz ich używać przez cały czas, gdy pisząc własne programy. Na przykład możesz napisać prosty program C bez definiowania własnych funkcji, ale trudniej jest to zrobić bez pewnych zmiennych, chyba że chcesz trzymać się „Cześć, świat!". Zmienna jest niczym więcej niż lokalizacją w pamięci o wartości, którą można zmienić (stąd nazwa). Ale zanim ogłaszsz zmienną, musisz wiedzieć, jaką wartość chcesz, a tutaj będziesz używać typów. I aby działać Na tych zmiennych potrzebujesz… oczywiście operatorów. Zamierzam uczynić ten kurs tak zwięzły, jak to możliwe, więc polecam uwagę i jak zwykle praktykuj.
Typy
Jak powiedziano, zanim pójdziesz i zadeklarujesz zmienną, musisz wiedzieć, jaką wartość będzie utrzymywała. Czy to będzie numer? Jeśli tak, to, jak duży mógłby uzyskać? Czy to liczba całkowita? A może chcesz zadeklarować ciąg? To są rzeczy, które musisz wiedzieć na pewno przed wybraniem tego typu, i zalecamy dodatkową opiekę, jeśli chodzi o możliwe przepełnienia bufora. C jest rodzajem języka, który daje wystarczającą linę do powieszenia i nie robi dużo ręki, a te błędy są bardzo trudne do zauważenia w dużym programie.
Zanim zaczniemy, musisz być świadomy relacji między sprzętem a typami. W tym miejscu oczekujemy, że wykonasz dla siebie trochę czytania, zwłaszcza jeśli używasz sprzętu innego niż x86, czy to 32 lub 64-bitowe, inne niż GCC lub systemy operacyjne inne niż Linux. Zwykle różnice te pojawiają się w przypadku wartości zmiennoprzecinkowych. Nie zagłębimy się w to, ponieważ to nie czas ani miejsce, ale oczekuje się, że przeczytasz dokumentację na temat kompilatora, zwłaszcza części zależnych od sprzętu. Teraz zacznijmy.
Char C; niepodpisany char UC; spodenki; Niepodpisany krótki nas; int i; unsigned u; długi L; niepodpisany długi ul; float f; Double D; długi podwójny ld; const int ci;
Postanowiliśmy podjąć ścieżkę „Najpierw, wyjaśniając później”, ponieważ uważaliśmy, że niektórzy z was znajdzie powyższy przykład znajomy. Istnieją inne powiązane języki, które deklarują swoje zmienne w niemal w ten sam sposób, a w końcu słowa kluczowe są intuicyjne. Zanim przejdziemy dalej, należy powiedzieć, że char, int, float i podwójne są podstawowymi typami danych w c. Niepodpisane i podpisane są modyfikatory, co oznacza, że jeśli musisz pracować z wartościami mniejszymi niż zero, powinieneś powiedzieć kompilatorowi, że twoja zmienna jest podpisana, ponieważ może być większa lub mniejsza niż zero. długie i krótkie (zwykle mają one zastosowanie do liczb całkowitych) pozwalają na przechowywanie większych wartości lub mniejsze, a liczba bajtów jest zależna od maszyny, ale krótka musi być zawsze mniejsza niż INT, co z kolei musi być zawsze mniejsze niż mniej niż mniej niż mniej niż mniej niż mniej niż mniej niż mniej niż mniejsze niż mniejsze niż przed siebie. Jak widać, w praktyce nie używasz długiego int lub krótkiego int, po prostu długa lub krótka. Słowo kluczowe Const mówi kompilatorowi, że gdy zmienna ma wartość, nie można jej zmienić.
Zacznijmy od najmniejszego typu, Char. Gwarantuje, że jest wystarczająco duży, aby pomieścić wartość jednego bajtu i jest zawsze ustalony. Jeśli ludzie powiedzą ci, że bajt ma zawsze osiem bitów, lepiej pomyśl ponownie. Każda popularna architektura sprzętowa rzeczywiście używa ośmiu-bitowych bajtów, ale są wyjątki, więc nie przyjmuj założeń, jeśli chcesz napisać przenośny kod. Na x86, ponieważ bajt ma osiem bitów, char (niepodpisany) może wytrzymać wartości od 0 do 255, to jest 28. W przypadku podpisania char, może on utrzymywać wartości od -128 do 127. Ale nazwa może cię wprowadzić w błąd: postać rzeczywiście może być przechowywana w charakterze, ale jeśli używasz Unicode, rozmawiamy tam o multibyte i będziesz musiał użyć WChar_T, ale więcej o tym później.
Teraz, gdy wiesz, jakie są modyfikatory typu, możemy dostać się do liczb całkowitych. Na liczbach całkowitych możesz połączyć modyfikatory znaku i długości, jak widać w powyższym przykładzie, aby pasować do twoich potrzeb. Pamiętaj, aby redaktor i sprawdź z limitami.H Header (w moim systemie można znaleźć w /usr /include), aby znaleźć rzeczywiste limity twojego systemu. Zgodnie z regułą INT będzie utrzymywał wartości od 0 do 65535 lub, jeśli zostanie podpisane, od -32768 do 32767. A długi modyfikator podwoi liczbę bajtów pamięci, więc jeśli INT wymaga 2 bajtów, długi będzie wymagał 4. Pozostawimy to użytkownikowi, aby dowiedzieć się reszty liczb całkowitych i ich minimalnych i maksymalnych wartości. Pokazamy jednak, jak dowiedzieć się rozmiarów i limitów w swoim systemie.
pływaki to wartości zmiennoprzecinkowe, co oznacza, że musisz zdefiniować taką zmienną:
Wartość zmiennoprzecinka; Wartość = 234.00;
Nawet jeśli nie ma nic po kropce (część dziesiętna), więc jest to liczba całkowita. W rzeczywistości są sytuacje, w których musisz zadeklarować wartość liczbową jako pływak, ponieważ wartość może się zmienić, a zadeklarowany typ musi być w stanie przechowywać wartości zmiennoprzecinkowe. Wszystkie wartości na twoim komputerze można znaleźć w float.H.
Zmienne
Teraz, gdy wiesz, jakie typy masz dostępne w C, zobaczmy, jak możesz ich skutecznie użyć. Niektóre mogą się zastanawiać: „Jeśli mamy długie podwójne, które mogą przechowywać wartości tak duże, dlaczego nie używać ich wszędzie?" . Programowanie dotyczy wydajności, a zwłaszcza programowania C, i dlatego przechowywanie wartości takiej jak 23 w podwójnym będzie 4 -krotnie większe niż pamięć, za nic. Kiedy deklarujesz zmienną, fragment pamięci jest zarezerwowany dla niej w zależności od typu. Więc po co marnować pamięć bez dobrego powodu? Stwórz nawyk używania dokładnego typu, który pasuje do twoich (możliwych) wartości, nie mniej, nie więcej. Widziałeś powyżej, jak to zrobić ogłosić zmienne. Teraz zobaczmy, jak je zdefiniować, jak podajmy im wartość.
c = „a”; i = 234; f = 12643.984; LD = 16546581654161598309.87;
Wzięliśmy nazwiska z poprzednich przykładów, które, jak zapewne zauważyłeś, są napisane, aby odzwierciedlić przypisany typ, więc „LD” to długa podwójna i tak dalej. W tym przykładzie podjęliśmy dwa kroki: pierwszy, który zadeklaruje zmienną, drugi, który ją zdefiniował, przypisując jej wartość. Niektórzy powiedzą, że dobrze jest pisać kod, ale możesz wykonać obie operacje w jednym kroku i nikt cię nie skrzywdzi:
char c = „a”; int i = 234; float f = 12643.984; długi podwójny LD = 16546581654161598309.87;
Polecamy, a nawet zachęcamy do używania nazw ze znaczeniem w swoim kodzie i komentowania go tak bardzo, jak to możliwe: są szanse, że będą inni czytają to, co napisałeś, a ich życie będzie o wiele łatwiejsze, jeśli to zrobisz. Używaj również czapek tylko w razie potrzeby, zwłaszcza że C korzysta z wszystkich CAP w różnych dyrektywach preprocesor. Również pierwszą postacią w nazwie zmiennej musi być list.
Zgodnie z obietnicą, ponieważ wszystkie rozmowy i bez gry nie są dobre, pokażemy ci mały program, którego możesz użyć, aby zobaczyć minimalne i maksymalne wartości różnych rodzajów, ale ilustrujemy tylko kilka. Reszta będzie Twoim zadaniem, postępując zgodnie z naszym przykładem, z redaktorem ma limity.H i pływaj.h Open. Będą tu kilka nowych elementów, ale nigdy się nie martw się, zostaną wyjaśnione.
#Include #include #include int main () unsigned długi długi Ullmax = Ullong_max; Long Lmax = long_max; Long Double Ldmax = ldbl_max; printf („Maksymalna wartość bez podpisanego długiego jest %LU.\ n ", Ullmax); printf („ maksymalna wartość długiego jest %LD.\ n ", lmax); printf („ maksymalna wartość długiego podwójnego to %lf.\ n ", ldmax); powrót 0;
Tak więc deklarujemy trzy zmienne o znaczących nazwach i przypisujemy im wartości trzech makr zdefiniowanych w granicach.H i pływaj.H. Wtedy oczywiście będziemy musieli je wydrukować. Robimy to za pomocą printf () i tutaj zatrzymamy się na małą rozmowę. Polecamy „Man 3 printf”, aby uzyskać więcej informacji na temat formatowe struny, to znaczy część podwójnych cytatów printf, która zaczyna się od „%”. Mówią Printf, jaka wartość powinna się spodziewać, więc powinien zachowywać się inaczej z różnymi typami. W pierwszym przykładzie „%lu” oznacza długie (l), które nie jest rozpisane („u”). W przypadku liczb całkowitych ciąg formatowy jest „d”, dla dziesiętny, a ponieważ jest to długa liczba całkowita, będzie to „%ld”. W trzecim Printf F oznacza Float, podwójny jest w zasadzie długi pływak, a długi podwójny to długi długi pływak, stąd format.
Teraz zapisz powyższy kod, skompiluj go i uruchom. Ten program, gdy dodasz do niego więcej, pomoże ci, gdy chcesz zadeklarować zmienną, ale nie masz jeszcze pewności, w jaki typ powinien się pasować.
Operatorzy
Operatory arytmetyczne
Ten podrozdział, oczywiście, dotyczy zwykłych podstawowych operatorów, których nauczyłeś się w szkole podstawowej. Ale jest trochę więcej. Przykład wroga,. Operatorzy +, -, *, / i % są operatorami binarnymi. % jest operatorem modulo, co oznacza, że jeśli mamy 50 % 2, wynik wyniesie 0, ponieważ wynik Division 50/2 w rezultacie ma liczbę całkowitą. Możesz użyć czterech pierwszych operatorów o dowolnej wartości liczbowej, ale modulo zajmuje się tylko liczbami całkowitych. Pierwszeństwo jest takie samo jak w książce arytmetyki.
Operatorzy relacyjni
Te operatorzy są>,> =, <=, <, and they all have the same precedence. For the next part we recommend extra care, because it's cause for much confusion in the beginner's league, and non-beginners alike. Like said above, one uses '=' to give some value to a variable. But if you want to check if a variable has a certain value, you use '==', and if it hasn't, use '!=', where '!' is the logical negation operator, as you'll see. Let's take the following (useless) example:
#Include int main () int var = 4; Jeśli (var == 4) printf ("var to 4!\N"); w przeciwnym razie printf („Jest coś nie tak.\N"); powrót 0;
Odlew
Krótko mówiąc, casting zmusza kompilatora do zapomnienia o typie zmiennej i traktowaniu jako posiadający inny typ, który dostarczasz. Nie jest to losowo, tylko między zgodnymi typami i zaleca się ostrożność przy użyciu odlewania. Załóżmy na przykład, że chcemy znaleźć wartość ASCII „A”. Kod może wyglądać tak:
#Include int main () char c = 'a'; printf („wartość ASCII„ A ”to %d.\ n ", (int) c); powrót 0;
Otrzymasz wartość 97, która rzeczywiście jest wartością ASCII „A”. Tak więc, używając nawiasów przed i po typu, który chcesz „narzucić” i wszystko to przed nazwą zmiennej, otrzymujesz casting. Powyższy przykład działa, ponieważ char jest niczym więcej niż małym int, więc typy są kompatybilne. Spróbuj rzucić zmienną powyżej na inne typy i zwróć uwagę na wyniki.
Operatorzy przyrostu i zmniejszania
Na pewno słyszałeś o C ++. Cóż, nazwa sugeruje, że jest to w jakiś sposób więcej niż C, ponieważ „++” jest operatorem przyrostowym (dodaje 1 do wartości zmiennej), tak jak „-” jest operatorem spadku. Są to niewidoce operato. Co to znaczy? Oznacza to, że możesz napisać ++ C lub C ++, a wynik może być podobny. Różnica polega na tym, że z prefiksem „++” wartość zmiennej jest najpierw zwiększana o jedną, a następnie używaną i na odwrót. Pokażmy ci krótki przykład, kiedy ma to znaczenie, a kiedy nie.
#Include int main () int x; int n = 10; int Z; n ++; / * n będzie teraz 11 */ ++N; / *Ditto, prefiks lub postfix nieważne */ x = n ++; / * X będzie 10 */ Z = ++ N; / * z będzie 11 */ powrót 0;
Ale co, jeśli chcesz zwiększyć/zmniejszyć się z więcej niż jednym? Proste, ponieważ C ++ jest odpowiednikiem C+= 1. Wymień 1 dowolną wartością, której potrzebujesz i jesteś ustawiony. Te operatorzy złożone można również stosować z dowolnymi innymi operatorami arytmetyki binarnej (e.G. *= lub /=), a także operatorzy bitowate, takie jak „a & = b”.
Operatorzy bitowate
W C możesz łatwo wykonywać operacje bitowe, ale pamiętaj! Działają i mają być używane tylko z typami całkowitymi, podpisani lub niepodpisanymi. Ci operatorzy to:
& - Bitwise i | - bitwise lub ^ - xor <> - prawy zmiana - - uzupełnienie
Operatorzy logiczni
Już mamy do czynienia z '!', który neguje dowolne logiczne wyrażenie, ale istnieją dwóch bardzo ważnych operatorów logicznych (uważaj, aby nie mieszać ich z bitwami): i i lub, lub, odpowiednio. Tak więc, jeśli chcę napisać w C coś w stylu „Jeśli zmienna 1 ma wartość 2, a zmienna 2 ma wartość 8”, napiszę w ten sposób:
Jeśli (var1 == 2 && var2 == 8)…
Tutaj oba warunki muszą oceniać jako prawdziwe w przypadku instrukcji następujących, jeśli wykonać. Jeśli albo zrobi, albo oba, zastąpimy „&&” na „||” (połączenie kontra rozbieżność).
Inni operatorzy
Ludzie, którzy mają pewne doświadczenie C, mogli zauważyć brak niektórych operatorów. Oczywiście, i wiemy o tym, ale jaki sens miałby wymienić operatora pośredniego, podczas gdy czytelnicy nie wiedzą, czym jest wskaźnik? Tak więc inni operatorzy, specyficzne dla innych części C, zostaną rozwiązani w odpowiednim czasie.
Wniosek
Zebranymi przykładami w tej części, jesteśmy pewni, że masz wystarczająco dużo, aby trochę zagrać i wypróbować różne opcje. Wiesz, kompilator nie gryzie się, jeśli podasz niewłaściwe dane, ani nie będzie eksplodować komputer. I, jak powiedzieliśmy wcześniej, nie możesz nauczyć się programowania, czytając tylko książki. Więc weź klawiaturę i stwórz coś interesującego.
Oto, czego możesz się spodziewać następnego:
- I. C Opracowanie w Linux - Wprowadzenie
- Ii. Porównanie C i innych języków programowania
- Iii. Typy, operatorzy, zmienne
- Iv. Kontrola przepływu
- V. Funkcje
- Vi. Wskaźniki i tablice
- VII. Struktury
- VIII. Podstawowe I/O
- IX. Styl kodowania i zalecenia
- X. Budowanie programu
- Xi. Opakowanie dla Debiana i Fedory
- XII. Uzyskanie pakietu w oficjalnych repozytoriach Debiana
Powiązane samouczki Linux:
- Wyrażenia regularne Pythona z przykładami
- Skrypt bash: Hello World Przykład
- Jak zainstalować Ubuntu na kicie USB
- Rzeczy do zainstalowania na Ubuntu 20.04
- Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
- Utwórz bootabilne USB Manjaro Linux
- Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
- Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć
- Utwórz rozruchowy Ubuntu 20.04 USB Stick na MS Windows 10
- Jak zainstalować sterowniki NVIDIA na Fedora 32