Još malo o podacima, operatorima, ...

1. Opseg djelovanja varijabli

Opseg djelovanja varijabli

Prije je rečeno da se varijable u C-u mogu najaviti izvan svih funkcija, na početku funkcije ili na početku bloka naredbi. Područje djelovanja određene varijable ovisi o mjestu na kojem je najavljena (deklarirana), pa ovisno o tome, varijable mogu biti:

  • globalne – najavljuju se izvan svih funkcija i mogu se koristiti u cijelom programu i
  • lokalne – varijable koje se najavljuju na početku funkcije ili kao argumenti funkcije i dostupne su samo u toj funkciji (ili bloku naredbi). Izvan funkcije ili bloka lokalne varijable ne postoje. Imena lokalnih varijabli u različitim funkcijama (blokovima) mogu biti ista.

Definicijom globalne varijable automatski joj se dodjeljuje početna vrijednost 0, a početna vrijednost lokalne može biti bilo koji podatak iz memorije. Dakle, za lokalnu varijablu ne znamo kolika joj je početna vrijednost. Najsigurnije je lokalne varijable inicijalizirati posebnom naredbom tijekom najave ili nakon nje (ali prije nego što ju prvi put upotrijebimo). Početne vrijednosti varijablama se dodjeljuju naredbom pridruživanja.


Recimo, naredbom int a=5; najavljena je cjelobrojna varijabla a i pridružena joj je početna vrijednost 5.

Taj se učinak postiže i ako se varijabla a deklarira  (int a;) prije, a naknadno joj se dodjeli početna vrijednost (a=5;).

 

Primjer 1.

Koju će vrijednost poprimiti varijabla a nakon najave oblika: int a = (3 * (4 + 2) - 2) / 2;?

a)       6
b)      8
c)       10

Rješenje

b) a = (3 * 6 – 2) / 2 = (18 - 2) / 2 = 16 / 2 = 8                

 

Primjer 2.

Što će se ispisati na zaslonu nakon izvođenja ovog programa?

#include <stdio.h>
int main()
{
     int xyz=462,x,y,z;
     x=xyz/100;
     y=xyz%100/10;
     z=xyz%10;
     printf("\n%d, %d, %d, %d", x,y,z,x+y+z);
     return 0;
}

 

Rješenje

Na zaslonu će se ispisati brojevi 4, 6, 2, 12, i to odvojeni zarezom i razmakom. Taj program rastavlja broj 462 na znamenke, ispisuje znamenke (4, 6, 2) i njihov zbroj (12).

Zamijetite da taj program nije općenit nego radi samo za konkretnu vrijednost varijable xyz. Veću bismo općenitost postigli učitavanjem troznamenkastog broja s tipkovnice naredbom

scanf("%3d", &xyz);

Tako napisana naredba osigurat će nam da je varijabla xyz uvijek najviše troznamenkasta. Ako upišemo više od tri znamenke, sve iza treće znamenke će se zanemariti (primjerice, ako upišemo 123456, varijabla xyz bit će jednaka 123). Ako upišemo manje od tri znamenke, primjerice broj 12, naša varijabla xyz bit će jednaka 12.

Cijeli, poopćeni zadatak izgledao bi ovako: