Zmienne
Titter
Zmienna to referencja do konkretnej komórki w pamięci RAM.
Każda zmienna w C ma:
- nazwę
-
typ przechowywanych danych
</span>
//zmienna typu integer - deklaracja
int przykladowa_zmienna;
Zmienne można deklarowac w dowolnym miejscu w kodzie.
Zmienne niezadeklarowane nie są rozpoznawane i przy próbie kompilacji zostanie zgłoszony odpowiedni błąd.
Podczas deklaracji zmiennej można ustalić jej wartość (początkową):
int zmienna=5;
(zalecam zerować* każdą zmienną)
Typy zmiennych:
//najważniejsze liczbowe
byte
int
short int
long int
double
float
//tekstowe
char
string
pchar
Każdy typ ma odpowiedni (zależny od architektury procesora) rozmiar, np.:
int - 4B
double - 8B
char -1B
Rozmiar każdego typu można sprawdzić wykonujac taki oto kod:
#include <iostream>
#include <conio.h>
#include <stdlib.h>
using namespace std;
void main()
{
cout<<sizeof(double);
getch();
}
(w funkcji sizeof() wpisując konkretny typ jaki nas interesuje)
Z nazwami zmiennych związane są pewne zasady, których warto przestrzegać:
- niestosowanie polskich (narodowych) znaczków (chyba, że .NET ;P)
- niemożliwe jest używanie spacji i innych znaków niedozwolonych w nazwach w danym systemie
- niedozwolone jest również rozpoczynanie nazw od cyfr
- warto stosować nazwy opisowe (nazwa, która mówi do czego służy dana zmienna)
- w danym programie nie mogą istnieć dwie takie same nazwy zmiennych (poza kilkoma przypadkami)
Napisałem, że nie może być dwóch takich samych nazw zmiennych w kodzie. Otóż nie do końca jest to prawda, bowiem C pozwala na tzw. przysłanianie zmiennych. Oto przykład:
int foo(int x)
{
if (x==2) return 10;
else return 0;
}
void main()
{
int x=0;
{
int x=2;
cout << foo(x);
}
cout << foo(x);
}
W kodzie zostały użyte 3 zmienne o tej samej nazwie, i to działa, ale jak?
Język C wyróżnia tzn. segmenty (bloki - każdy wyznaczany jest przez {}) kodu. Dla każdego takiego bloku tworzy osobny stos z danymi w pamięci i dlatego nie myli jednego x-a z jednego segmentu z x-em z drugiego segmentu. Dlatego też kod z przykładu się wykona i wypisze na ekranie 10, potem 0. Gdy odwołujemy się do jakiejś zmiennej jest ona szukana przez kompilator w najbliższym segmencie w strukturze (bloki można oczywiście zagnieżdżać). A co z x-em w deklaracji funkcji?? To tez jest inny x a x przekazywany do funkcji to nie ten sam x. Taka zbieżność jest często myląca, w szczególności gdy przekazujemy parametr przez referencję!
Kilka przykładów czytelnych nazw (dotyczy nazw złożonych):
MojaDlugaNazwa
moja_dluga_nazwa
rzadziej stosowane:
mojaDLUGAnazwa
*zerować - ustalać wartość odpowiadającą zeru dla liczb, zgodną z deklarowanym typem
Co znowu jest źle? Bo teraz nie kumam!
Titter, to jest C/C++
dobrze ale to jest kategoria C ;P
spoko, jak będę miał trochę czasu, ale przecież każdy to może poprawić, nawet Ty! ;D
" niestosowanie polskich (narodowych) znaczków" a .NET to co? :P
Ogólnie na dzień dzisiejszy tekst nieco do poprawy...