Typy danych w C, klasa danych, których wartości mają podobną charakterystykę. Typ określa wewnętrzną reprezentację danych w pamięci. Najbardziej podstawowe typy danych to: boolean, integer, zmiennoprzecinkowe, string, wskaźniki.
Przy dynamicznym typowaniu zmienna jest powiązana z typem w momencie inicjalizacji. Okazuje się, że zmienna w różnych częściach kodu może mieć różne typy. Dynamiczne wsparcie pisania Skrypt Java Python, Ruby, PHP.
Pisanie statyczne jest przeciwieństwem dynamicznego. Po deklaracji zmienna otrzymuje typ, który nie zmienia się dalej. Języki C i C ++ są właśnie takie. Ta metoda jest najwygodniejsza do pisania złożonych kodów, a wiele błędów jest eliminowanych na etapie kompilacji.
Języki są nieformalnie podzielone na silnie typowane i słabo napisane. Silne pisanie oznacza, że kompilator wygeneruje błąd, jeśli typy oczekiwane i rzeczywiste nie są zgodne.
x = 1 + "2"; // błąd - nie można dodać znaku do liczby
Przykład słabego pisania.
x = 1 + "2"; // 3
Kontrole homologacji typu przeprowadzane są przez system bezpieczeństwa typu. Błąd literowy występuje, na przykład, podczas próby użycia liczby jako funkcji. Istnieją nieliczne języki. W przeciwieństwie do typowych pozwalają na wykonywanie dowolnych operacji na każdym obiekcie.
Zmienne, niezależnie od ich typu, mają swój własny zakres i czas istnienia.
Klasy pamięci:
Wszystkie zmienne w języku C są domyślnie lokalne. Mogą być używane tylko wewnątrz funkcji lub bloku. Po zakończeniu funkcji ich wartość ulega zniszczeniu.
Zmienna statyczna jest także lokalna, ale poza jej blokiem może mieć inną wartość, a pomiędzy wywołaniami funkcji wartość jest zachowywana.
Zmienna zewnętrzna jest globalna. Jest dostępny w dowolnej części kodu, a nawet w innym pliku.
Zmienna rejestru zaleca, aby kompilator zapisywał wartość w pamięci RAM.
Specyfikatory typów danych w C mogą nie być wskazane w takich przypadkach:
Aby określić typy proste, należy określić kwalifikatory typu int, char, float lub double. Zmienne mogą być podstawionymi modyfikatorami unsigned (unsigned), signed (signed), short, long, long long.
Domyślnie wszystkie liczby są podpisane, odpowiednio, mogą być w zakresie tylko dodatnich liczb. Aby zdefiniować zmienną typu char jako podpisaną, zostanie podpisany znak char. Długi, długi długi i krótki wskazują ilość miejsca przeznaczonego na pamięć. Największy jest długi, a najmniejszy krótki.
Char jest najmniejszym typem danych w C. Tylko 1 bajt pamięci jest przydzielany do przechowywania wartości. Zmiennymi typu postaci są zwykle przypisywane znaki, rzadziej - liczby. Wartości znaków są cytowane.
char a = "a";
char b = 2;
Typ int przechowuje liczby całkowite, jego rozmiar nie jest zdefiniowany - zajmuje do 4 bajtów pamięci, w zależności od architektury komputera.
int a = 12;
Wyraźna konwersja niepodpisanej zmiennej jest podana jako:
unsigned int a = 12;
Implicit wygląda następująco:
int a = 12u;
Pływak i podwójne zdefiniuj liczby za pomocą kropki. Liczby zmiennoprzecinkowe są przedstawione jako -2,3 lub 3,34. Podwójna służy do większej dokładności - po separatorze dziesiętnym jest więcej cyfr. Ten typ zajmuje więcej miejsca w pamięci niż float.
podwójne a = 12,4567;
Void ma wartość null. Definiuje funkcje, które nic nie zwracają. Za pomocą tego kwalifikatora w argumentach metod określana jest pusta wartość. Wskaźniki, które mogą przyjmować dane dowolnego rodzaju, są również zdefiniowane jako nieważne.
Używane w kontrolach warunkowych i cyklach. Ma tylko dwa znaczenia:
Wartości logiczne można konwertować na wartość int. Prawda jest równa jednemu, fałszywa do zera. Konwersja typów odbywa się tylko między bool i int, w przeciwnym razie kompilator wygeneruje błąd.
int x = 123;
if (x) {// Błąd: "Nie można niejawnie przekonwertować typu" int "na" bool ""
};
if (x! = 0) // Sposób C #
{
}
Tablice są typami złożonymi podanymi w C. PL nie działa z ciągami w taki sam sposób, jak robi to JavaScript lub Ruby. W C wszystkie łańcuchy są tablicami elementów wartości znaku. Łańcuchy kończą się zerowym bajtem "".
Deklaracja strun w C: char b [] = {'s', 't', 'r', 'i', 'n', 'g', ''};
Ciąg jest również zadeklarowany w formie podsumowania.
char a [] = "string";
a [1] === b [1]; // "t"
Tablice całkowite lub znakowe są zadeklarowane w ten sam sposób: nazwa typu danych nazwa zmiennej [rozmiar tablicy].
int a [100];
char b [5];
Podobna składnia wskazuje, że rozmiar wartości int nie może być większy niż 100 znaków. Podczas tworzenia tablicy liczba komórek jest zarezerwowana w pamięci do przechowywania elementów. Dlatego do przetwarzania macierzy danych o nieznanej wymiarowości lub takich, które ulegną zmianie, pamięć jest dynamicznie przydzielana.
Wielowymiarowe tablice są zadeklarowane w następujący sposób:
int a [2] [3];
Podczas tworzenia tej tablicy, w tym przypadku alokowana jest przestrzeń do przechowywania dwóch tablic zagnieżdżonych, które składają się z trzech elementów.
Inicjowanie tablicy wielowymiarowej:
int a [2] [3] = {1, 2, 3, 4, 5, 6};
a [1]; // [1, 2, 3]
a [2]; // [4, 5, 6]
Wskaźniki - główna cecha języka, otwierają możliwości pracy z pamięcią. Przekazują informacje o lokalizacji innej zmiennej w pamięci. Przed użyciem są one, podobnie jak inne zmienne, zadeklarowane w postaci wskaźnika typu *. Typ jest typem zmiennej, wskaźnik jest nazwą wskaźnika.
Aby ustawić wskaźnik na wartość innej zmiennej, używane są łącza. Przekazują adres zmiennej i służą jako bezpieczny wskaźnik.
int a = 2;
int * wskaźnik;
wskaźnik = i a;
Łącza umożliwiają pracę ze wskaźnikiem, tak jak z obiektem.
W tym przypadku & a zwróci 0x7340cad2a25c, * wskaźnik - 2, ale wskaźnik bez "*" zwróci 0x7340cad2a25c.
Zmieniając wartość, nie zmieniamy jej adresu, więc wskaźnik będzie również odnosił się do 0x7340cad2a25c, ale zmieni jego wartość.
Wskaźnik do innego wskaźnika deklarowany jest w postaci:
int w = 100;
int * x = & w;
int ** z = & x;
Wskaźnik do tablicy działa w nieco inny sposób.
int c [5] = [1, 2, 3, 4, 5], * a;
Zadeklarowaliśmy tablicę liczb całkowitych i wskaźnik int.
W tym przypadku wskaźnik nie wskazuje samej tablicy, ale tylko jej pierwszego elementu. Tak więc
a = c;
i
a = & c [0]; // 1
równoważne sobie.
Teraz możesz odwołać się do trzeciego elementu tablicy za pomocą wyrażenia
* (a + 3)
lub
a [3];
W powyższym przykładzie widać, że dodanie wskaźnika działa w inny sposób. Można do nich zastosować różne operacje arytmetyczne.
Wskaźnik do tablicy jest określony w następujący sposób:
char (* pa) [10];
Ale tablica wskaźników wygląda następująco:
char * pc [10];
Struktura to rodzaj danych w języku C, który ułatwia pisanie i zrozumienie programów, ułatwia grupowanie danych.
Struktura taka jak tablica reprezentuje zbiór danych, ale jej elementy mogą być innego typu, a odniesienie jest dokonywane przez nazwę, a nie przez indeks.
{
typ1 nazwa_zmiennej1;
typ1 nazwa_zmiennej1;
// inni członkowie danych;
}
Zmienna strukturalna jest zadeklarowana po zamknięciu nawiasów klamrowych.
struct book
{
char tytuł [20];
char autor [30];
podwójna obsada;
} book1, book2, * ptr_bk;
Dostęp do pól zapewnia operator ".". Aby uzyskać dostęp do tytułu zmiennej, piszemy:
book1.title;
W ten sposób inicjujemy zmienną
book1.title = "String";
Aby odnieść się do wskaźników, użyj operatora "->".
ptr_bk-> cast;
lub operator ".".
(* (ptr_bk)). cast;
Drugi rodzaj list z tym jest enum (wyliczenie). Zawiera zmienne liczb całkowitych.
enum {red, blue, green};
Przykład deklaruje anonimowe wyliczenie zawierające trzy elementy: czerwony, niebieski, zielony. Przed uzyskaniem dostępu do elementów deklarowana jest wyliczana zmienna.
enum name1 {czerwony, niebieski, czerwony} nazwa zmienna;
W tym przypadku nazwa1 jest nazwą wyliczenia, a nazwa_zmienki jest nazwą zmiennej. W momencie tworzenia struktury można ustawić kilka zmiennych. Są one oddzielone przecinkami.
enum name1 {czerwony, niebieski, czerwony} nazwa_zmiennej1, nazwa_zmiennej2, nazwa_zmienki3;
Dostęp do elementów wyliczeniowych jest określony za pomocą "." Opertera.
varname.red = "red";
Język C zapewnia duży zestaw typów. Są tworzone przy użyciu odpowiednich kwalifikatorów.
Rodzaje baz są podzielone na liczbowe (podwójne, zmiennoprzecinkowe) i podpisane (int, char). Podpisane i niepodpisane modyfikatory wskazują na obecność znaku przed symbolem. Krótkie i długie modyfikatory są odpowiedzialne za wielkość komórek w pamięci do przechowywania wartości zmiennych. Logiczny typ danych ma dwie wartości: true i false. Tablice, struktury odnoszą się do złożonych typów danych. Wskaźnik działa z adresem zmiennej, do której wskazuje.