C/C++
nazwy,
słowa kluczowe,
zmienne,
typy proste,
stałe,
operatory,
wyrażenia,
instrukcja przypisania.
C/C++ -
nazwy
, słowa kluczowe, zmienne, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
Nazwa
Nazwa inaczej identyfikator jest oznaczeniem zmiennej, funkcji, etykiety
(innych obiektów zdefiniowanych przez użytkownika).
Zasady nadawania nazw:
1.
W języku C nazwa może składać się z: liter, cyfr i znaku podkreślenia,
przy czym nie może zaczynać się od cyfry. Rozróżnianych jest
pierwszych 31 znaków. W C++ nie ma ograniczeń na długość.
2.
W języku C/C++ rozróżniane są małe i wielkie litery.
3.
Nazwa nie może być identyczna ze słowem kluczowym (słowa kluczowe
stanowią alfabet języka programowania (w C nie może także być
identyczna z nazwą funkcji własnej użytkownika lub znajdującej się w
bibliotece).
Słowa kluczowe
Słowa kluczowe są ciągami znaków których znaczenie w języku jest dokładnie
określone i nie wolno ich wykorzystywać w charakterze nazw.
Język C
auto, break, case, char, const, continue, default, do, double, else,
enum, extern, float, for, goto, if, int, long, register, return, short,
signed, sizeof, static, struct, switch, typedef, union, unsigned, void,
volatile, while.
(32)
Język C++ (dodatkowo)
asm, bool, catch, class, const_cast, delete, dynamic_cast, explicit,
false, friend, inline, mutable, namespace, new, operator, private,
protected, public, reinterpret_cast, static_cast, template, this, throw,
true, try, typeid, typename, using, virtual, wchar_t.
(30)
C/C++ - nazwy,
słowa kluczowe
, zmienne, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
Zmienne
Zmienną nazywamy komórkę (lub komórki) pamięci mogącą przechowywać
daną określonego typu. Zmienna posiada nazwę. Nazwa i typ zmiennej
określane są w procesie deklaracji zmiennej.
Nazwy zmiennym nadaje się zgodnie z ogólnymi zasadami tworzenia nazw.
Typ zmiennej określa, jaki rodzaj danych w zmiennej może być
przechowywany (liczby całkowite, liczby rzeczywiste, znaki, wartości
logiczne, macierze, struktury określone przez użytkownika). Typy danych
można podzielić na typy proste i złożone.
Do zmiennej można zapisywać dane oraz można z niej dane odczytywać.
Zmienne dzieli się na lokalne – deklarowane wewnątrz funkcji, oraz globalne
– deklarowane poza funkcjami.
W procesie deklaracji zmiennej określa się także tzw. specyfikator klasy
pamięci.
C/C++ - nazwy, słowa kluczowe,
zmienne
, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
Zmienne c.d.
Przykład deklaracji zmiennej
register int liczba_calkowita;
specyfikator klasy
pamięci
nazwa typu
nazwa zmiennej
W powyższym przykładzie została zadeklarowana zmienna o nazwie
liczba_calkowita, typu całkowitego (int) i o ile jest to możliwe, to będzie
zapamiętana w rejestrze procesora (specyfikator register). Jeżeli w czasie
deklaracji zmiennej nie zostanie określony specyfikator klasy pamięci to
jest on ustalany domyślnie w zależności od miejsca deklaracji zmiennej.
C/C++ - nazwy, słowa kluczowe,
zmienne
, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
Klasy pamięci
register - jest wykorzystywany do deklaracji zmiennych do których
dostęp powinien być szybki. O ile jest to możliwe to kompilator
zapamiętuje te zmienne w rejestrze. Z klasą register powinny być
deklarowane zmienne do których następują częste odwołania. Należy
również pamiętać, że nie wszystkie zmienne mogą być zapamiętane
w rejestrach ze względu na ograniczoną ich liczbę.
C/C++ - nazwy, słowa kluczowe,
zmienne
, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
W języku C++ występują 4 klasy pamięci:
register
extern
static
auto
Specyfikator klasy pamięci w linii deklaracji zmiennej informuje
kompilator o tym, w jaki sposób ma być zapamiętana zmienna
.
Klasy pamięci
extern - jest wykorzystywany do oznaczenia zmiennej zadeklarowanej
na zewnątrz pliku źródłowego (lub funkcji). Jest to informacja dla
konsolidatora którego zadaniem jest połączenie osobno skompilowanych
plików. Użycie specyfikatora extern skutkuje tym, że kompilator nie
rezerwuje pamięci dla tak zadeklarowanej zmiennej.
C/C++ - nazwy, słowa kluczowe,
zmienne
, typy proste,
stałe, operatory, wyrażenia, instrukcja przypisania.
static – zastosowanie tego specyfikatora do zmiennej lokalnej powoduje
przypisanie jej trwałego miejsca w pamięci (jak zmiennej globalnej).
Statyczna zmienna lokalna zachowuje więc swoją wartość pomiędzy
kolejnymi wywołaniami funkcji.
auto – zmienna jest usuwana z pamięci w chwili zakończenia bloku
w którym została zadeklarowana. Jest to domyślna klasa dla zmiennych
deklarowanych w funkcjach (blokach).
Typy danych – typy proste
W języku C++ wyróżniamy 7 podstawowych (atomowych),
wbudowanych typów. Są to:
char –
typ znakowy
int –
typ całkowity
float –
typ zmiennoprzecinkowy
double –
typ zmiennoprzecinkowy podwójnej precyzji
void –
typ bez wartości
bool –
typ logiczny
wchar_t –
typ szerokich znaków
C++
C
W C++, dzięki zaimplementowaniu klasy string możliwe jest używanie
typu łańcuchowego. Nie jest to jednak typ wbudowany.
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
Typy danych – typy proste: void i bool
Typ void jest wykorzystywany w 3 przypadkach:
- deklarowanie funkcji nie zwracających wartości,
- deklarowanie funkcji nie pobierających żadnych argumentów,
- tworzenie wskaźników ogólnych.
Typ logiczny bool służy do przechowywania wartości logicznych
true
lub
false
. Wartość
false
– fałszu odpowiada liczbie 0, a wartość
true
–
prawdy, liczbie całkowitej różnej od zera.
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
Typy danych – typy proste (atomowe), przykłady deklaracji
Typy danych – typy proste – modyfikatory typów
W języku C++ typy: char, int, double mogą zostać zmodyfikowane przy
pomocy tzw. modyfikatorów typów. Występuje 4 modyfikatory:
signed (ze znakiem)
unsigned (bez znaku)
long (format długi)
short (format krótki)
Postać deklaracji z wykorzystaniem modyfikatora typu:
modyfikator typu
nazwa typu
nazwa zmiennej
unsigned char znak;
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
Typy danych – typy proste – modyfikatory typów
W uzasadnionych przypadkach można użyć modyfikatora w stosunku do
już zmodyfikowanego typu. Modyfikatory należy interpretować
parami : (signed, unsigned) i (long, short) i trzymać się zasady, że
w jednej deklaracji nie występują dwa modyfikatory z tej samej pary.
Postać deklaracji z wykorzystaniem modyfikatora typu zmodyfikowanego
unsigned short int krotka_liczba_bez_znaku;
modyfikator typu
nazwa typu
nazwa zmiennej
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
Typy danych – użyteczne połączenia typów prostych z modyfikatorami
w systemach 32 bitowych ich charakterystyka
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
3,4 *10
-4932
do 1,1*10
+4932
10
long double
1,7*10
-308
do 1,7*10
308
8
double
3,4*10
-38
do 3,4*10
38
4
float
0 do 65535
2
unsigned short int
-32 768 do 32767
2
short int
0 do 4 294 967 295
4
unsigned int
-2 147 483 648 do 2 147 483 647
4
int
0 do 255
1
unsigned char
-128 do 127
1
char
Zakres
Liczba bajtów
Typ
przykład
Typy danych – typy proste – modyfikatory dostępu do zmiennych
W języku C++ występują dwa modyfikatory typu określające dostęp do
zmiennej. Są to modyfikatory:
const
volatile
Zmiennych zadeklarowanych z modyfikatorem const nie można zmieniać w
trakcie działania programu. Nadanie wartości odbywa się w linii deklaracji
Przykład deklaracji:
const int stala=7;
Modyfikator volatile jest wykorzystywany w celu poinformowania kompilatora
o tym, że wartość zmiennej może ulec w sposób nieokreślony w programie.
Modyfikatory const i volatile można stosować łącznie.
C/C++ - nazwy, słowa kluczowe, zmienne,
typy proste
,
stałe, operatory, wyrażenia, instrukcja przypisania.
Stałe (literały)
W języku C++ stałe reprezentują ustalone wartości, które nie mogą być
zmieniane w trakcie działania programu. Stałe mogą być dowolnego
typu prostego oraz dodatkowo, stała może być łańcuchem znaków
(ciągiem znaków umieszczonych w cudzysłowie).
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe
, operatory, wyrażenia, instrukcja przypisania.
”łańcuch znaków”
false true
bool
134.45 5.32
double
134.45F 5.32e -4F
float
985U 30000U
unsigned int
3 67 -567
int
‘s’ ‘6’ ‘\n’
char
Przykłady stałych
Typ
Stałe - wybrane znaki z ukośnikiem wstecznym
(sterujące, specjalne)
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe
, operatory, wyrażenia, instrukcja przypisania.
\b
znak cofania o jedno pole znakowe
\n
znak przejścia do nowego wiersza
\r
znak powrotu karetki
\0
znak zerowy (ang. Null)
\\
ukośnik wsteczny
\a
sygnał dźwiękowy
\”
cudzysłów
\’
apostrof
Operatory
W języku C++ występują następujące grupy operatorów:
arytmetyczne,
relacji,
logiczne,
bitowe,
specjalne
skróty
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Operatory arytmetyczne
+
dodawanie,
-
odejmowanie,
*
mnożenie,
/
dzielenie,
%
dzielenie modulo (reszta z dzielenia),
++ inkrementacja (zwiększenie wartości o 1),
--
dekrementacja (zmniejszenie wartości o 1)
operatory inkrementacji i dekrementacji mogą być używane
przedrostkowo lub przyrostkowo, w instrukcjach przypisania nie
jest obojętne z jakiej postaci się korzysta.
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
priorytety (od najwyższego):
+
-
++
--
(jednoargumentowe)
* / %
+
-
(dwuargumentowe)
Uwaga: dzielenie operandów typu int daje wynik typu int (następuje odrzucenie
ułamka)
Operatory c.d.
Operatory relacji
>
większy
<
mniejszy
>=
większy równy
<=
mniejszy równy
==
równy
!=
różny
Operatory logiczne
&&
iloczyn logiczny, AND
||
suma logiczna, OR
!
negacja logiczna, NOT
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Priorytety (od najwyższego) ,operatory
relacji i logiczne łącznie :
!
> >= < <=
== !=
&&
||
Operatory bitowe
&
iloczyn bitowy, AND
|
suma bitowa, OR
^
różnica symetryczna, XOR (1 kiedy różne)
~
negacja bitowa, NOT
>>
przesunięcie w prawo
<<
przesunięcie w lewo
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Operatory bitowe c.d.
Operatory bitowe stosowane są w języku C do zmiennych typu char i int.
Zastosowanie typowe:
&
zerowanie bitów
|
ustawianie bitów (na 1)
<< szybkie mnożenie 2
liczba_pozycji_przesunięcia
>> szybkie dzielenie (analogicznie)
Operacje przesunięcia <<, >> nie są operacjami przesunięcia cyklicznego
Usunięte bity są tracone a wchodzące posiadają wartość 0.
Wyjątek stanowi przesunięcie w prawo liczby ujemnej, kiedy
uzupełnienie odbywa się jedynkami.
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Operatory - operatory specjalne
=
przypisanie (prawej strony do lewej)
()
zwiększenie priorytetu
[]
dostęp do elementu tablicy
.
dostęp do pola struktury, unii, zmiennej lub metody obiektu,
-
> dostęp do pól struktury przez wskaźnik
&
udostępnienie adresu zmiennej
*
udostępnienie wartości spod adresu
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Operatory specjalne c.d.
,
wiązanie wyrażeń np.
x=(y=4,y+1);
oznacza, że zanim zostanie wykonana instrukcja
x=y+1,
zostanie wykonana instrukcja
y=4;
sizeof
udostępnienie długości zmiennej lub specyfikatora typu (w
bajtach) np.
float x;
dlugosc1 = sizeof x;
dlugosc2 = sizeof(int); // tu koniecznie
// w nawiasach
(typ)
rzutowanie typów (określenie typu wartości wyrażenia)
int
x=5,y=2;
float z;
z=(float)x/y; //je
ś
li wynik ma by
ć
rzeczywisty!
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
przykład
Operatory specjalne c.d.
?:
wyrażenie warunkowe, postaci
z=x>y?x:y;
(jeżeli
x
jest większe od
y
to
z
przypisz wartość
x
w przeciwnym
wypadku
z
przypisz wartość
y
).
Operatory złożone (skróty)
+= *= /= %= <<= >>= &= ^= |=
Operatory powyższe stosuje się w celu skrócenia zapisu operacji i tak np.
x+=2;
// oznacza wykonanie operacji
x=x+2;
x%=2;
// oznacza wykonanie operacji
x=x%2;
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe,
operatory
, wyrażenia, instrukcja przypisania.
Operatory - priorytety
najwyższy
() []
-
> .
! ~ +
-
++
-- & *
sizeof (typ)
* / %
+
-
(dwuargumentowe)
<< >>
< <= > >=
== !=
&
^
|
&&
||
?:
= *= /= %= += -= &= ^= |= <<= >>=
najniższy
,
x=4>>2/3;
x=????
x=8>>1+1;
x=???
Wyrażenia
Wyrażenie jest kombinacją stałych, zmiennych, wywołań funkcji oraz
operatorów. Wyrażenia są konstruowane zgodnie z zasadami algebry.
Przykład
c/(i+f)*d-sin(x)+0.5
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe, operatory,
wyrażenia
, instrukcja przypisania.
zmienne
funkcja
stała
Wyrażenia c.d.
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe, operatory,
wyrażenia
, instrukcja przypisania.
Podczas obliczania wartości wyrażeń, w trakcie wykonywania działań,
następuje automatyczna konwersja typów jednego z operandów tak, aby
były jednakowego typu – bez utraty informacji.
char ch;int i; float f;double d;
ch/i + f*d – f+i;
int
double
float
double
double
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe, operatory, wyrażenia,
instrukcja przypisania
.
Instrukcja przypisania
W instrukcji przypisania następuje przypisanie wartości wyrażenia
zmiennej postaci:
wynik=c/(i+f)*d-sin(x)+0.5;
Możliwe jest przypisanie wielokrotne postaci:
a=b=c=0;
wykorzystywane np. do zerowania zmiennych względnie ich
inicjalizacji tą samą wartością.
C/C++ - nazwy, słowa kluczowe, zmienne, typy proste,
stałe, operatory, wyrażenia,
instrukcja przypisania
.
Instrukcja przypisania –
skutki automatycznej konwersji typów
3 bajty (od najstarszego)
int (32 bity)
char
2 bajty (od najstarszego)
int (32 bity)
short int
zaokrąglenie (mniejsza precyzja)
long double
double
zaokrąglenie (mniejsza precyzja)
double
float
starszy bajt
short int
char
wynik jest ujemny, jeśli wartość >127
unsigned char
signed char
Utrata informacji
Typ wyrażenia
Typ docelowy
przykład