Typy danych:
typ danych | rozmiar w bitach [b]/bajtach [B] | opis | zakres liczb |
int | (16/32/64)/(2/4/8) | nie zdefiniowana wielkość typu całkowitego | ... |
short int | 16/2 | +/- całkowity krótki ze znakiem | od -215 do 215 |
unsigned short int | 16/2 | całkowity krótki bez znaku | od 0 do 216 |
long int | 32/4 | +/- całkowity ze znakiem | od -231 do 231 |
unsigned long int | 32/4 | całkowity bez znaku | od 0 do 232 |
long long int | 64/8 | +/- całkowity długi ze znakiem | od -263 do 263 |
unsigned long long int | 64/8 | całkowity długi bez znaku | od 0 do 264 |
char | 8/1 | znak ASCII lub liczba całkowita | od -128 do 128 |
unsigned char | 8/1 | znak ASCII lub liczba całkowita (bez znaku) | od 0 do 255 |
float | 32/4 | liczba zmiennoprzecinkowa pojedynczej precyzji | od 3,4*1038 do 3,4*1038 |
double | 64/8 | liczba zmiennoprzecinkowa podwójnej precyzji | od 1,8*10308 do 1,8*10308 |
signed - wartość ze znakiem
unsigned - wartość bez znaku
przykład:
unsigned long - jest to liczba 32 bitowa bez znaku czyli z przedziału od 0 do 4 mld
signed long - jest to liczba 32 bitowa ze znakiem czyli od -2 do 2 mld
unsigned char - przedział od 0 do 255
signed char - przedział od -128 do 128
W prosty sposób można sprawdzić ile miejsca zmienna zajmuje w pamięci za pomocą funkcji "size of()"
#include <stdlib.h>
#include <stdio.h>
double x;
int y;
int main(int argc, char *argv[])
{
y=sizeof(x); //do y będzie wpisana wartość jaką x zajmuje w pamięci (w bajtach)
printf("%d", y); //wyświetlenie wartości na ekran
return 0;
}
|
lub
#include <stdlib.h>
#include <stdio.h>
int y;
int main(int argc, char *argv[])
{
y=sizeof(double); //zamiast zmiennej umieszczamy nazwe typu
printf("%d", y); //wyświetlenie wartości na ekran
return 0;
}
|
Rodzaje zmiennych:
- zmienne statyczne - działają przez cały czas działania programu (np. zmienne globalne) lub zmusić samemu aby zmienna była zmienną statyczna poprzez static int=n; wartosc początkowa takiej zmienne bedzię równa 0
- zmienne automatyczne - dzielimy na zmienne lokalne i argumenty funkcji, ich wartość początkowa jest nieokreślona
- zmienne rejestrowe - zmienna taka znajduje się w rejestrach (tzn my sugerujemy aby taka zmienna się tam znalazła, a nie zawsze jest wolny rejestr :]), dzięki czemu jest do niej szybszy dostęp, proponujemy zapis zmiennej w rejestrze w taki sposób register int x;
Przykład zastosowania zmiennych statycznych
#include <stdlib.h>
#include <stdio.h>
long z;
int x,y;
long zliczaj(int a, int b){
static long suma;
suma+=a*b;
return (suma);
}
int main(int argc, char *argv[])
{
printf("Podaj x= ");
scanf("%d",&x);
printf("Podaj y= ");
scanf("%d",&y);
z=zliczaj(x,y); //wywołanie funkcji
printf("%d\n", z); //pierwsze wywołanie funkcji
z=zliczaj(x,y);
printf("%d\n", z); //drugie wywołanie funkcji
z=zliczaj(x,y);
printf("%d\n", z); //trzecie wywołanie funkcji
}
|
|