Post on 06-Jan-2016
description
Staša VujičićČas 10
Brojač karakteraProgram čita tekst sa ulaza i broji velika i mala slova, cifre, beline i redove. Program demonstrira korišćenje globalnih podataka.
#include <stdio.h>
/* Deklaracija funkcije prebroj */void prebroj();
/* Globalni brojaci. Podrazumevano su inicijalizovani nulom. */
int br_malih, br_velikih, br_cifara,
br_belina, br_redova;
/* main funkcija */int main(){
/* Pozivamo funkciju za prebrojavanje */prebroj();
/* Prikazujemo vrednosti globalnih brojaca, koje je funkcija prebroj() izmenila */printf("Broj malih slova: %d\n", br_malih);printf("Broj velikih slova: %d\n", br_velikih);printf("Broj cifara: %d\n", br_cifara);printf("Broj belina: %d\n", br_belina);printf("Broj redova: %d\n", br_redova);}
/* Definicija funkcije prebroj */void prebroj(){ int c; while((c = getchar()) != EOF) { if(c >= 'a' && c <= 'z') br_malih++; else if(c >= 'A' && c <= 'Z') br_velikih++; else if(c >= '0' && c <= '9') br_cifara++; else if(c == '\n' || c == '\t' || c == ' ') { br_belina++; if(c == '\n') br_redova++; } }}
Pokazivač je promenljiva koja sadrži adresu neke druge promenljive.
int x=1, y=1;11
11
x
y
int *ip; /* ip je pokazivac na int, odnosno *ip je tipa int */ip = &x; /* ip sada pokazuje na x */
11
11
x
y
ip
y=*ip; /* y je sada 1 */*ip = 0; /* x je sada 0 */
00
11
x
y
ip
*ip+=10; /* x je sada 10*/
1010
11
x
y
ip
++*ip; /* x je sada 11*/
1111
11
x
y
ip
(*ip)++; /* x je sada 12, zagrada neophodna zbog prioriteta operatora*/
1212
11
x
y
ip
Program demonstrira jednostavnu upotrebu pokazivača.
#include <stdio.h>
/* main funkcija */int main(){ int a = 2;
int *pi;
/* Prikaz vrednosti a pre izmene */ printf("Vrednost promenljive a: %d\n", a); /* Vrednost promenljive a: 2*/
/* Promena vrednosti promenljive a preko pokazivaca */
pi = &a;
izraz &a se može čitati kao: "adresa od a". Uopšte, ako je data
deklaracija T a; gde je T proizvoljan tip, tada je
Tip izraza &a tip (T *) (pokazivač na tip T). Vrednost izraza &a je adresa bajta u memoriji od
koga počinje zapis podatka a.
*pi = *pi + 2; Izraz *pi se može čitati kao: "ono na šta pokazuje pi". Ovaj izraz se može koristiti i kao leva i kao desna vrednost. Ako je definisan pokazivač T *p; gde je T
proizvoljan tip, tada je tip izraza *p upravo tip T vrednost izraza *p je vrednost podatka na adresi
na koju pokazuje p, tumačen kao podatak tipa T. Ako se izraz *p koristi kao leva vrednost, tada se vrednost na desnoj strani operatora dodele upisuje u memorijsku lokaciju na koju pokazuje p, prethodno konvertovana po
potrebi u tip T.
/* Prikaz vrednosti promenljive a nakon izmene */
printf("Vrednost promenljive a: %d\n", a);
}
/* Vrednost promenljive a: 4*/
#include <stdio.h>
main() {int x = 3;/* Adresu promenjive x zapamticemo u
novoj promenljivoj. Nova promenljiva je tipa pokazivaca na int (int*) */
int* px;
printf("Adresa promenljive x je : %p\n", &x);printf("Vrednost promenljive x je : %d\n", x);
/* Adresa promenljive x je : 0012FF88 Vrednost promenljive x je : 3 */
px = &x;printf("Vrednost promenljive px je (tj. px) :
%p\n", px);printf("Vrednost promenljive na koju ukazuje
px (tj. *px) je : %d\n", *px);/*Vrednost promenljive px je (tj. px) :
0012FF88 Vrednost promenljive na koju ukazuje px
(tj. *px) je : 3*/
/* Menjamo vrednost promenljive na koju ukazuje px */
*px = 6;printf("Vrednost promenljive na koju
ukazuje px (tj. *px) je : %d\n", *px);/*Vrednost promenljive na koju ukazuje px
(tj. *px) je : 6/* Posto px sadrzi adresu promenljive x,
ona ukazuje na x tako da je posredno promenjena i vrednost promenljive x */
printf("Vrednost promenljive x je : %d\n", x);
}/* Vrednost promenljive x je : 6*/
#include <stdio.h>
/* main funkcija */int main(){ double x = 2.1, *px = &x; /*px pokazuje
na adresu od x*/ double y = 0.1, *py = &y; /*py pokazuje
na adresu od y*/
/* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */
printf("Vrednost pokazivaca px je %p\n", px); printf("Vrednost pokazivaca py je %p\n", py);
/* Vrednost pokazivaca px je 0xbfe7caa0 Vrednost pokazivaca py je 0xbfe7ca98*/
/* Ispisujemo vrednosti na koje pokazuju pokazivaci */
printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py);/* px pokazuje na vrednost: 2.100000 py pokazuje na vrednost: 0.100000 */
/* Ispitujemo da li su pokazivaci jednaki, tj. da li pokazuju na isti objekat u memoriji */
if(px == py) printf("Pokazivaci px i py pokazuju na
isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju
na isti objekat\n");
/* Pokazivaci px i py ne pokazuju na isti objekat */
py = px;
/* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */
printf("Vrednost pokazivaca px je %p\n", px);
printf("Vrednost pokazivaca py je %p\n", py);
/* Vrednost pokazivaca px je 0xbfe7caa0 Vrednost pokazivaca py je 0xbfe7caa0 */
/* Ispisujemo vrednosti na koje pokazuju pokazivaci */
printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py);/* px pokazuje na vrednost: 2.100000 py pokazuje na vrednost: 2.100000 */
/* Ispitujemo da li su pokazivaci jednaki, tj. da li pokazuju na isti objekat u memoriji */
if(px == py) printf("Pokazivaci px i py pokazuju na
isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju
na isti objekat\n");/* Pokazivaci px i py pokazuju na isti
objekat*/
px = &y;
/* Prikazujemo vrednosti pokazivaca. %p specifikator u printf()-u ispisuje vrednost pokazivaca u heksadekadnoj notaciji. */
printf("Vrednost pokazivaca px je %p\n", px); printf("Vrednost pokazivaca py je %p\n", py);/* Vrednost pokazivaca px je 0xbfe7ca98 Vrednost pokazivaca py je 0xbfe7caa0 */
/* Ispisujemo vrednosti na koje pokazuju pokazivaci */
printf("px pokazuje na vrednost: %f\n", *px); printf("py pokazuje na vrednost: %f\n", *py);/* px pokazuje na vrednost: 0.100000 py pokazuje na vrednost: 2.100000 */
/* Ispitujemo da li su pokazivaci jednaki, tj. da li pokazuju na isti objekat u memoriji */
if(px == py) printf("Pokazivaci px i py pokazuju na
isti objekat\n"); else printf("Pokazivaci px i py ne pokazuju
na isti objekat\n");}
/* Pokazivaci px i py ne pokazuju na isti objekat */