Zmienne i typy C ++: int, double, char, string, bool

Spisie treści:

Anonim

Zmienne w C ++

Zmienna C ++ zapewnia nam nazwane możliwości przechowywania. Pozwala programiście manipulować danymi zgodnie z potrzebami. Każda zmienna ma typ w C ++. Typ zmiennej pomaga określić rozmiar i układ mapy pamięci zmiennej, zakres wartości, które mogą być przechowywane w tej pamięci oraz zestaw operacji, które można do niej zastosować.

W tym samouczku C ++ nauczysz się:

  • Zmienne w C ++
  • Podstawowe typy zmiennych w C ++
  • Zasady deklarowania zmiennych w C ++
  • Zmienne typy danych C ++
  • Nazwa zmiennej lub identyfikatory
  • Kwalifikator Const w C ++
  • Zakres zmiennych w C ++
  • Konwersja typu zmiennej
  • Zarejestruj zmienne
  • Sekwencje ewakuacyjne

Podstawowe typy zmiennych w C ++

Oto podstawowe typy zmiennych C ++:

Int:

Liczba całkowita to literał numeryczny (powiązany z liczbami) bez żadnej części ułamkowej ani wykładniczej. Przykład. 120, -90 itd.

Podwójnie:

Jest to wartość zmiennoprzecinkowa podwójnej precyzji. Przykład: 11,22, 2,345

Zwęglać:

Literał znakowy jest tworzony przez umieszczenie pojedynczego znaku w pojedynczych cudzysłowach. Na przykład: „a”, „m”, „F”, „P”, „}” itd.

Pływak:

Literał zmiennoprzecinkowy to literał numeryczny, który ma postać ułamkową lub wykładniczą. Na przykład: 1.3, 2.6

Literały smyczkowe:

Literał łańcuchowy to sekwencja znaków ujęta w cudzysłów. Na przykład: „Jak się masz?”

Bool:

Przechowuje wartość logiczną prawda lub fałsz.

Zasady deklarowania zmiennych w C ++

Oto kilka typowych zasad nazywania zmiennej:

  • Nazwa zmiennej C ++ może zawierać tylko litery, cyfry i podkreślenie.
  • Nazwa zmiennej C ++ nie może zaczynać się od liczby.
  • Nazwy zmiennych nie powinny zaczynać się wielką literą.
  • Nazwa zmiennej używana w C ++ nie może być słowem kluczowym. Na przykład int jest słowem kluczowym używanym do oznaczania liczb całkowitych.
  • Nazwa zmiennej C ++ może zaczynać się od podkreślenia. Jednak nie jest to uważane za dobrą praktykę.

Zmienne typy danych C ++

C ++ definiuje cały zestaw typów pierwotnych

Z typem void nie są skojarzone żadne wartości i można go używać tylko w kilku przypadkach. Najczęściej występuje jako zwracany typ funkcji, które nie zwracają wartości.

W arytmetyczne rodzaje zawierać znaków, liczb, wartości logicznych i liczb zmiennoprzecinkowych. Typ arytmetyczny, jeśli jest dalej podzielony na 2 kategorie

  1. Typy zmiennoprzecinkowe . Typ zmiennoprzecinkowy (lub zmiennoprzecinkowy) reprezentuje liczby dziesiętne. Standard IEEE określa minimalną liczbę cyfr znaczących. Większość kompilatorów zwykle zapewnia większą precyzję niż określone minimum. Zwykle liczby zmiennoprzecinkowe są reprezentowane przez 32 bity, podwajane w 64 bitach, a długie podwajane w 96 lub 128 bitach.
  2. Typy całkowite (w tym typy znakowe, całkowite i logiczne). Typ Boolean ma tylko dwa typy wartości: True lub False. Istnieje kilka char typów, z których większość istnieją wspieranie internacjonalizacji. Najbardziej podstawowym typem znaków jest char. Znak ma taki sam rozmiar, jak pojedynczy bajt maszyny, czyli pojedynczy bajt.

W Integral typy mogą być podpisane lub bez znaku.

Typ ze znakiem : reprezentują liczby ujemne lub dodatnie (w tym zero). W typie ze znakiem zakres musi być równo podzielony między wartościami + ve i -ve. Zatem 8-bitowy znak ze znakiem będzie zawierał wartości od -127 do 127.

Typ bez znaku: W typie bez znaku wszystkie wartości są> = 0. 8-bitowy znak bez znaku może zawierać od 0 do 255 (łącznie).

Nazwa zmiennej lub identyfikatory

Identyfikatory mogą składać się z kilku liter, cyfr i znaku podkreślenia lub ich kombinacji. Nie ma ograniczeń co do długości nazwy.

Identyfikatory muszą

  • zaczynać się od litery lub podkreślenia („_”).
  • I rozróżniana jest wielkość liter; duże i małe litery są różne:

// definiuje cztery różne zmienne int

int guru99, gurU99, GuRu99, GURU99;

Język C ++ zarezerwował kilka nazw do użytku.

Istnieje wiele przyjętych konwencji nazewnictwa zmiennych w różnych językach programowania. Przestrzeganie tych konwencji może poprawić czytelność programu.

  • Identyfikator powinien przynajmniej wskazywać jego znaczenie.
  • Nazwy zmiennych są zwykle pisane małymi literami guru99, a nie Guru99 czy GURU99.
  • Klasy, które definiujemy, zwykle zaczynają się od dużej litery.
  • Identyfikatory zawierające wiele słów powinny wizualnie odróżniać każde słowo. Na przykład guru99_website, a nie guru99website.

Deklaracja i definicja zmiennej C ++

Deklaracja zmiennej udostępnia programowi nazwę w zakresie, w jakim została zdefiniowana. Przykład:

int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};

Kwalifikator Const w C ++

Załóżmy, że istnieje zmienna buffsize, która określa liczbę danych wejściowych do pobrania od użytkownika. Tutaj nie chcemy zmieniać wartości buffsize w całym programie. Chcemy zdefiniować zmienną, której wartość, o której wiemy, nie powinna się zmieniać.

W takim przypadku użyj słowa kluczowego const

const int bufSize = 512; // input buffer size

To definiuje bufSize jako stałą. Każda próba przypisania lub zmiany bufSize powoduje błąd.

Tutaj nie możemy zmienić wartości obiektu const po jego utworzeniu, musi być zadeklarowany i zainicjowany. W przeciwnym razie kompilator zgłosi błąd.

const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci

Zakres zmiennych w C ++

Zasięg to zakres programu, w którym zmienna ma znaczenie. Przeważnie ta sama nazwa może być używana w odniesieniu do różnych jednostek w różnych zakresach. Zmienne są widoczne od momentu ich zadeklarowania do końca zakresu, w którym pojawia się ich deklaracja.

#include int main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum <

Ten program definiuje 3 nazwy, a mianowicie, główne, sumę i wartość. Używa nazwy przestrzeni nazw std, wraz z dwoma innymi nazwami z tej przestrzeni nazw-cout i endl.

  • Nazwa funkcji „main” jest zdefiniowana poza nawiasami klamrowymi. Nazwa funkcji main - podobnie jak większość innych nazw zdefiniowanych poza funkcją - ma zasięg globalny. Oznacza to, że raz zadeklarowane nazwy o zasięgu globalnym są dostępne w całym programie.
  • Zmienna suma jest definiowana w zakresie bloku, który jest treścią funkcji głównej. Dostęp do niego można uzyskać z miejsca deklaracji oraz w pozostałej części ciała funkcji głównej. Jednak nie poza nim. Oznacza to, że suma zmiennej ma zasięg blokowy .
  • Zmienna val jest zdefiniowana w zakresie „dla instrukcji”. Można go łatwo użyć w tej instrukcji, ale nie w innym miejscu w funkcji głównej. Ma zasięg lokalny .

Zagnieżdżony zakres

Zakres może zawierać inne zakresy. Zakres zawarty (lub zagnieżdżony) jest nazywany zakresem wewnętrznym. Zakres zawierający to zakres zewnętrzny.

#include using namespace std;// Program for illustration purposes only: It is bad style for a function// to use a global variable and also define a local variable with the same nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;}

Wynik nr 1 pojawia się przed lokalną definicją ponownego wykorzystania. Tak więc ten wynik

instrukcja to ta, która używa nazwy ponownie użytej, która jest zdefiniowana w zasięgu globalnym. Ta instrukcja wyprowadza

42 0

Wyjście nr 2 pojawia się po lokalnej definicji ponownego wykorzystania. Jest teraz objęty zakresem. Dlatego ta druga instrukcja wyjściowa po prostu używa obiektu lokalnego o nazwie reused, a nie globalnego i wyników

0 0

Dane wyjściowe nr 3 zastępują domyślne reguły określania zakresu przy użyciu operatora zasięgu. Zakres globalny nie ma nazwy. Tak więc, gdy operator zasięgu (: :) ma pustą lewą stronę. Interpretuje to jako żądanie pobrania nazwy po prawej stronie zakresu globalnego. W związku z tym wyrażenie używa globalnego ponownego wykorzystania i danych wyjściowych

42 0

Konwersja typu zmiennej

Zmienną jednego typu można przekształcić w inną. Nazywa się to „konwersją typów”. Zobaczmy zasady konwersji różnych typów zmiennych C ++:

Przypisanie wartości innej niż bool do zmiennej bool daje fałsz, jeśli wartość wynosi 0, a prawda, jeśli jest inaczej.

bool b = 42; // b is true

Przypisanie bool do jednego z pozostałych typów arytmetycznych daje 1, jeśli bool ma wartość true i 0, jeśli bool jest false.

bool b = true;int i = b; // i has value 1

Przypisanie wartości zmiennoprzecinkowej do zmiennej typu int daje wartość, która jest obcinana. Wartość, która jest przechowywana, to część przed kropką dziesiętną.

int i = 3.14; // i has value 3

Przypisanie wartości int do zmiennej typu float powoduje, że część ułamkowa staje się zerowa. Precyzja jest zwykle tracona, jeśli liczba całkowita ma więcej bitów niż może pomieścić zmienna zmiennoprzecinkowa.

Int i=3;double pi = i; // pi has value 3.0

Jeśli spróbujemy przypisać wartość spoza zakresu do zmiennej typu unsigned, wynikiem jest reszta wartości% (modulo)

Na przykład 8-bitowy typ znaku bez znaku może zawierać wartości od 0 do 255 włącznie. Przypisanie wartości spoza tego zakresu spowoduje, że kompilator przypisze pozostałą część tej wartości modulo 256. Dlatego, zgodnie z powyższą logiką, przypisanie -1 do 8-bitowego znaku bez znaku daje temu obiektowi wartość 255.

unsigned char c = -1; // assuming 8-bit chars, c has value 255

Jeśli spróbujemy przypisać wartość spoza zakresu do obiektu typu podpisanego, wynik jest nieprzewidywalny. To jest nieokreślone. Program może wydawać się działać na zewnątrz, może ulec awarii lub może generować wartości śmieciowe.

signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined

Kompilator stosuje ten sam typ konwersji, gdy używamy wartości jednego typu, gdy oczekiwana jest wartość innego typu.

int i = 42;if (i) // condition will evaluate as truei = 0;

Jeśli ta wartość = 0, to warunek jest fałszywy; wszystkie inne (niezerowe) wartości dają prawdę. Zgodnie z tą samą koncepcją, kiedy używamy bool w wyrażeniu arytmetycznym, jego wartość jest zawsze konwertowana na 0 lub 1. W rezultacie użycie bool w wyrażeniu arytmetycznym jest zwykle prawie na pewno niepoprawne.

Uwaga: nie mieszaj typów podpisanych i niepodpisanych

Wyrażenia, które łączą ze znakiem i bez znaku, mogą dać zaskakujące i błędne wyniki, gdy wartość ze znakiem jest ujemna. Jak omówiono powyżej, wartości ze znakiem są automatycznie konwertowane na bez znaku.

Na przykład w wyrażeniu arytmetycznym, takim jak

x* y

Jeśli x wynosi -1, a y wynosi 1, i jeśli oba x i y są liczbą int, to zgodnie z oczekiwaniami wartość wynosi -1.

Jeśli x jest int, a y są bez znaku, to wartość tego wyrażenia zależy od tego, ile bitów ma liczba całkowita na maszynie kompilującej. Na naszym komputerze to wyrażenie zwraca 4294967295.

Zarejestruj zmienne

Dostęp do zmiennych rejestrów jest szybszy w porównaniu do zmiennych pamięci. Tak więc zmienne, które są często używane w programie C ++, można umieścić w rejestrach za pomocą słowa kluczowego register . Słowo kluczowe register mówi kompilatorowi, aby przechował daną zmienną w rejestrze. To wybór kompilatora, czy umieścić go w rejestrze, czy nie. Ogólnie kompilatory same wykonują różne optymalizacje, które obejmują umieszczanie niektórych zmiennych w rejestrze. Nie ma ograniczenia liczby zmiennych rejestrowych w programie C ++. Ale kompilator może nie przechowywać zmiennej w rejestrze. Dzieje się tak, ponieważ pamięć rejestrów jest bardzo ograniczona i jest najczęściej używana przez system operacyjny.

Zdefiniować:

register int i;

Komentarze

Komentarze to fragmenty kodu ignorowane przez kompilator. Pozwala programiście robić notatki w odpowiednich obszarach kodu źródłowego / programu. Komentarze mają postać bloków lub pojedynczych wierszy. Komentarze do programu są wyjaśnieniami. Może być zawarty w kodzie C ++, który pomoże każdemu czytać jego kod źródłowy. Wszystkie języki programowania pozwalają na jakąś formę komentarzy. C ++ obsługuje komentarze jednowierszowe i wielowierszowe.

  • Komentarze jednowierszowe to takie, które zaczynają się od // i trwają do końca linii. Jeśli ostatnim znakiem w linii komentarza jest \, komentarz będzie kontynuowany w następnej linii.
  • Komentarze wieloliniowe to te, które zaczynają się od / * i kończą * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/

Sekwencje ewakuacyjne

Niektóre znaki, takie jak backspace i znaki sterujące, nie mają widocznego obrazu. Takie znaki są znane jako znaki niedrukowalne. Inne znaki (pojedyncze i podwójne cudzysłowy, znak zapytania i ukośnik odwrotny) mają specjalne znaczenie w wielu językach programowania.

Nasze programy nie są w stanie bezpośrednio używać żadnego z tych znaków. Zamiast tego możemy użyć sekwencji ucieczki do reprezentowania takiego znaku. Sekwencja ucieczki zaczyna się od ukośnika odwrotnego.

Język programowania C ++ definiuje kilka sekwencji ucieczki:

Co to robi?

Postać

Nowa linia

\ n

Zakładka pionowa

\ v

Ukośnik wsteczny

\\

Powrót karetki

\ r

Zakładka pozioma

\ t

Backspace

\b

Znak zapytania

\?

Formfeed

\fa

Alert (dzwonek)

\za

Cudzysłów

\ "

Pojedynczy cudzysłów

\ '

Używamy sekwencji ucieczki tak, jakby to był pojedynczy znak:

cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline

Możemy również napisać uogólnione sekwencje specjalne \ x, po których następuje jedna lub więcej cyfr szesnastkowych. Lub używamy znaku \, po którym następuje jedna, dwie lub trzy cyfry ósemkowe. Uogólniona sekwencja ucieczki reprezentuje wartość liczbową znaku. Kilka przykładów (zakładając zestaw znaków Latin-1):

\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')

Możemy użyć predefiniowanych sekwencji ucieczki, tak jak używamy każdego innego znaku.

cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newline

Podsumowanie

  • Zmienna C ++ zapewnia nam nazwane możliwości przechowywania.
  • Typy zmiennych C ++: int, double, char, float, string, bool itp.
  • Zakres zawarty (lub zagnieżdżony) jest określany jako zakres wewnętrzny, a zakres zawierający to zakres zewnętrzny.
  • Zmienną jednego typu można przekształcić w inną. Nazywa się to „konwersją typów”.
  • Dostęp do zmiennych rejestrów jest szybszy w porównaniu do zmiennych pamięci.
  • Komentarze to fragmenty kodu ignorowane przez kompilator.
  • Niektóre znaki, takie jak backspace i znaki sterujące, nie mają widocznego obrazu.