9.3.1 Göst ricinin c rg y m nims dilm si
ə
ə ə ə ə
ə
ə
C rg elan ed n zaman biz aşağıdakı sintaksisd n istifad edirik:
ə ə
ə
ə
ə
tip cərgənin_adı [elementərin_sayı];
Qeyd etdik ki, burada c rg nin_adı c rg d ki ilk element istinad ed n göst ricidir. Buna
ə ə
ə ə ə
ə
ə
ə
gör başqa göst rici elan edib bu c rg y m nims d bil rik. Misal üçün aşağıdakı kimi:
ə
ə
ə ə ə ə
ə ə
ə
tip cərgənin_adı [elementərin_sayı], *göstərici;
göstərici = cərgənin_adı;
Bu zaman göst rici c rg nin ilk elementin istinad etmiş olacaq. Bu biz * operatorundan
ə
ə ə
ə
ə
istifad etm kl h min elementin qiym tini örg nm y v d yişm y imkan verir. Misal
ə
ə ə ə
ə
ə
ə ə ə ə
ə ə
üçün *göst rici = 45; m liyyatı c rg nin ilk elementin ()c rg nin_adı[0] ) 45 qiym tni
ə
ə ə
ə ə
ə
ə ə
ə
m nims tmiş olacaq.
ə
ə
Çalışma 7. int tipli 5 elementd n ibar t x c rg si v y göst ricisi elan edin. y
ə
ə
ə ə
ə
ə
göst ricisind n istifad etm kl x-in ilk elementin 120 qiym tini m nims din.
ə
ə
ə
ə ə
ə
ə
ə
ə
H lli.
ə
Proqram kodu aşağıdakı kimi olar:
int
main(){
int
x[
5
], *y;
y = &x;
*y =
120
;
}
9.3.2 Göst rici üz rind hesab m ll ri
ə
ə
ə
ə ə ə
Göst rici qiym t olaraq özünd yaddaş ünvanı saxlayır. Qeyd etdik ki, fiziki yaddaş
ə
ə
ə
ünvanları 0-dan böyük - b rab r tam d dl rl ifad olunur. Bu is ünvan üz rind
ə
ə
ə ə ə ə
ə
ə
ə
ə
hesab m ll ri aparmağa imkan verir. İstifad çi proqramlaşdırmada ünvanlarla bağlı
ə ə ə
ə
sas n toplama v çıxma m liyyatları aparılır.
ə
ə
ə
ə ə
Göst ricinin qiym tini artırıb-azaltdıqda o yaddaş sah si boyu müvafiq olaraq "yuxarı" v
ə
ə
ə
ə
"aşağı" sürüşür. Bundan istifad edib göst ricinin qiym tini artırıb-azaltmaqla onu c rg
ə
ə
ə
ə ə
boyu yuxarı v aşağı sürüşdür r k c rg nin ist nil n elementi üz rin yerl şdirm k olar.
ə
ə ə
ə ə
ə ə
ə ə
ə
ə
Tutaq ki, aşağıdakı kimi c rg v göst rici elan etmişik:
ə ə ə
ə
tip cərgənin_adı [elementərin_sayı], *göstərici;
göst ricini c rg y m nims d k,
ə
ə ə ə ə
ə ə
göstərici = cərgənin_adı;
Hal-hazırda göst rici c rg nin ilk elementi üz rind dir (c rg nin_adı[0]). g r
ə
ə ə
ə
ə
ə ə
Ə ə
göst ricinin qiym tini 1 vahid artırsaq o növb ti elementin üz rin sürüş r,
ə
ə
ə
ə ə
ə
göstərici = göstərici +
1
;
Hal-hazırda göst rici c rg nin ikinci elementi üz rind dir (c rg nin_adı[1]).
ə
ə ə
ə
ə
ə ə
Eyni qayda il g r göst ricinin qiym tini 1 vahid azaltsaq onda o c rg nin vv lki
ə ə ə
ə
ə
ə ə
ə ə
elementi üz rin sürüş r.
ə ə
ə
göstərici = göstərici -
1
;
Bu zaman göst rici c rg nin ilk elementi (c rg nin_adı[0]) üz rin sürüş r.
ə
ə ə
ə ə
ə ə
ə
Çalışma 8. int tipli 10 elementd n ibar t x c rg si v y göst ricisi elan edin. Dövr
ə
ə
ə ə
ə
ə
operatorundan v y göst ricind n istifad etm kl x -in elementl rin 50-d n 59 -a kimi
ə
ə
ə
ə
ə ə
ə ə
ə
qiym tl r m nims din.
ə ə
ə
ə
H lli.
ə Proqram kodu aşağıdakı kimi olar:
#include
int
main (){
int
x[
10
], *y;
int
i;
// y-e x -i menimsedek
y = x;
// y hal-hazirda x -in ilk elementine (x[0])
// muraciet edir
for
(i=
0
; i<
10
; ++i){
// y -in istinad etdiyi elemente qiymet menimsedek
*y =
50
+ i;
// y -i cergenin novbeti elementi uzerin surushdurek
y = y +
1
;
}
}
9.3.3 Göst ricil rl s tirl rin laq si
ə
ə ə ə
ə
ə
ə
S tirl r c rg l rin xüsusi - elementl rinin tipi char olan halıdır. Ona gör göst ricil r v
ə ə ə ə ə
ə
ə
ə
ə ə
c rg l rl bağlı bütün qaydalar analoji olaraq s tirl r t tbiq olunur.
ə ə ə ə
ə ə ə ə
Çalışma 9. Tutaq ki, 16 elementi olan s s trin "abcdefghijklmnop" qiym ti
ə
ə
ə
m nims tmişik. g r char tipi g göst ricisi elan ets k v ona s qiym ti m nims ts k o
ə
ə
Ə ə
ə
ə
ə
ə
ə
ə ə
hansı simvola istinda ed r?
ə
H lli.
ə g göst ricisini s s trin m nims tdikd ( g = s; ) g göst ricisi s s trinin (c rg sinin)
ə
ə
ə ə
ə
ə
ə
ə
ə ə
ilk elementin istinad ed r, başqa sözl 'a' simvoluna.
ə
ə
ə
Çalışma 10. Tutaq ki, 16 elementi olan s s trin "abcdefghijklmnop" qiym ti
ə
ə
ə
m nims tmişik. g r char tipi g göst ricisi elan ets k v ona s qiym ti m nims tdikd n
ə
ə
Ə ə
ə
ə
ə
ə
ə
ə
ə
sonra göst ricinin qiym tini 1 vahid artırsaq o hansı simvola istinda ed r?
ə
ə
ə
H lli.
ə g göst ricisini s s trin m nims tdikd ( g = s; ) g göst ricisi s s trinin (c rg sinin)
ə
ə
ə ə
ə
ə
ə
ə
ə ə
ilk elementin istinad ed r, y ni 'a' simvoluna. Daha sonra g -nin qiym tini 1 vahid
ə
ə
ə
ə
artırsaq (g = g + 1; ) onda o növb ti elementin üz rin sürüş r, başqa sözl 'b'
ə
ə ə
ə
ə
simvolunun.
Çalışma 11. Tutaq ki, 16 elementi olan s s trin "abcdefghijklmnop" qiym ti
ə
ə
ə
m nims tmişik. g r char tipi g göst ricisi elan ets k v ona s qiym ti m nims tdikd n
ə
ə
Ə ə
ə
ə
ə
ə
ə
ə
ə
sonra göst ricinin qiym tini 5 vahid artırsaq o hansı simvola istinda ed r?
ə
ə
ə
H lli.
ə g göst ricisini s s trin m nims tdikd ( g = s; ) g göst ricisi s s trinin (c rg sinin)
ə
ə
ə ə
ə
ə
ə
ə
ə ə
ilk elementin istinad ed r, y ni 'a' simvoluna. Daha sonra g -nin qiym tini 5 vahid
ə
ə
ə
ə
artırsaq (g = g + 5; ) onda o 5 vahid sonrakı elementin , başqa sözl 'f' simvolunun
ə
üz rin sürüş r.
ə ə
ə
Çalışma 12. Tutaq ki, 20 elementli char tipli s s tri v 10 elementli q s tri elan edilib v s
ə
ə
ə
ə
s trin "abcdefghijklmnop" qiym ti m nims dilib. Göst ricil rd n v strncpy
ə
ə
ə
ə
ə
ə
ə ə
ə
funksiyasından istifad etm kl s s trinin 3-cü simvolu il 10 -cu simvolu arasında qalan
ə
ə ə
ə
ə
hiss sini q s trin köçürün .
ə
ə
ə
H lli.
ə
vv lc g göst ricisi elan ed k v onu s s trinin 3 -cü elementi üz rin
Ə ə ə
ə
ə
ə
ə
ə ə
sürüşdür k. Bunun üçün vv lc g -ni s - m nims d k, daha sonra onun qiym tini 2
ə
ə ə ə
ə ə
ə ə
ə
vahid artıraq, aşağıdakı kimi:
g = s;
g = g +
2
;
Bu zaman g göst ricisi s s trinin 3-cü elementi üz rin sürüşmüş olar. Daha sonra
ə
ə
ə ə
növb ti 7 simvolu (10 -cu simvola q d r) q -y köçürm k üçün strncpy funksiyasından
ə
ə ə
ə
ə
aşağıdakı kimi istifad ed bil rik:
ə
ə
ə
strncpy(q,g,
7
);
Yekun proqram kodu aşağıdakı kimi olar:
#include
int
main(){
char
s[
20
], q[
10
], *g;
// s setrine "abcdefghijklmnop" qiymeti yerleshdirek
strcpy(s,
"abcdefghijklmnop"
);
// g -ni s -in 3-cu simvolu uzerine surushdurek
g = s;
g = g +
2
;
// birbasha g = s + 2; ve ya g = &s[2]; yaza da bilerdik
// s -in 3 -cu simvolu ile 10 -cu simvolu arasinda
// qalan hissesini q -ye menimsedek
strncpy(q,g,
7
);
}
9.4 Dinamik Yaradılma v Silinm
ə
ə
Proqramın icrası zamanı yaddaş sah sinin ayrılmasına v silinm sin dinamik yaradılma
ə
ə
ə
ə
v silinm deyilir. Gös tricil r proqramın icrası boyu yaddaşda yer ayrıla bil r v h min
ə
ə
ə
ə ə
ə ə ə
yer ehtiyac qalmadıqda h min yer azad oluna bil r.
ə
ə
ə
9.4.1 Dinamik yaradılma
Göst riciy yaddaşda yer ayırmaq üçün new operatorundan istifad olunur. new
ə
ə
ə
operatorundan istifad etm kl göst riciy yer ayırmaq üçün aşağıdakı sintaksisd n
ə
ə ə
ə
ə
ə
istifad edilir:
ə
göstərici =
new
tip;
Çalışma 13. int tipli x göst ricisi elan edin v ona dinamik yer ayırın.
ə
ə
H lli.
ə Kod aşağıdakı kimi olar:
int
*x;
x =
new
int
;
9.4.2 Dinamik ayrılan yaddaşdan istifad
ə
! Tipik proqramlaşdırma s hvi: Göst riciy yer ayırmada ona muraci t etm k.
ə
ə
ə
ə
ə
Göst riciy new operatoru il yer ayırdıqdan sonra ulduz * operatorundan istifad
ə
ə
ə
ə
etm kl h min yerd olan m lumata müraci t etm k olar. Ulduz operatoru il göst ricinin
ə ə ə
ə
ə
ə
ə
ə
ə
istinad etdiyi sah y müraci t qaydası il biz artıq tanışıq.
ə ə
ə
ə
Çalışma 14. int tipli x göst ricisi elan edin, new operatoru il x - yer ayırın v h min
ə
ə
ə
ə ə
yer 5 qiym tini yazın.
ə
ə
H lli.
ə
Kod aşağıdakı kimi olacaq:
int
*x;
x =
new
int
;
*x =
5
;
9.4.3 Dinamik silinm
ə
new operatoru il ayrılan yeri silm k üçün delete operatorundan istifad olunur. delete
ə
ə
ə
operatorunun sintaksisi aşağıdakı kimidir:
delete
göstərici;
Çalışma 15. int tipli x göst ricisi elan edin, new operatoru il x - yer ayırın v h min
ə
ə
ə
ə ə
yer 5 qiym tini yazın. x - ayrılmış yeri yaddaşda silin.
ə
ə
ə
H lli.
ə Kod aşağıdakı kimi olacaq:
int
*x;
x =
new
int
;
*x =
5
;
delete
x;
9.4.4 Dinamik obyektl r
ə
Strukt v ya sinif tipind n olan d yiş nl obyekt adlanır. Göst rici obyektl rin elanı v
ə
ə
ə
ə ə
ə
ə
ə
onlara dinamik yer ayrılma v silinm adi d yiş nl rd olduğu kimidir. H ddl rin
ə
ə
ə
ə ə ə
ə
ə ə
müraci t is bir q d r f rqlidir. Adi halda obyektin h ddin müraci t etm k üçün nöqt -
ə
ə
ə ə ə
ə
ə
ə
ə
ə
'.' -d n istifad edirdik. Dinamik obyektl rin h ddl rin müraci t etm k üçün is '->'
ə
ə
ə
ə
ə ə
ə
ə
ə
işar l m sind n istifad olunur, aşağıdakı kimi:
ə ə ə
ə
ə
obyekt->hədd
Çalışma 16. int tipli x v char tipli c h ddl rind n ibar t s adlı struct tipi elan edin. s
ə
ə
ə
ə
ə
tipind g adlı göst rici obyekt elan edin. g göst ricisin dinamik yer ayırın. g -nin x
ə
ə
ə
ə
h ddin 5, c h ddin 'B' qiym ti m nims din.
ə
ə
ə
ə
ə
ə
ə
H lli.
ə
Kod aşağıdakı kimi olar:
// evvelce int tipli x və char tipli c həddlərindən ibarət
// s adlı struct tipi elan edek
struct
s{
int
x;
char
c;
};
// s tipinden g gostericisi elan edek
s *g;
// g -ye yer ayıraq
g =
new
s;
// g -nin heddlerine qiymetler menimsedek
g->x =
5
;
g->c =
'B'
;
Çalışma 17. int tipli en v uz d yiş n h ddl rind n, int sahe() funksiya h ddind n ibar t
ə
ə
ə
ə
ə
ə
ə
ə
ə
kvadrat sinfi elan edin. kavadrat sinfind n kv göst ricisi elan edin. kv -y dinamik yer
ə
ə
ə
ayırın v sah sini çap edin.
ə
ə
H lli.
ə Proqram kodu aşağıdakı kimi olar:
#include
class
kvadrat{
public
:
kvadrat();
int
sahe();
private
:
int
en;
int
uz;
};
int
main(){
kvadrat *kv;
kv =
new
kvadrat;
std::cout<< kv->sahe();
delete
kv;
}
$10 Makroslar v başlıq fayllar.
ə
Biz indiy kimi proqramlarada
ə
#include, #include
kimi s tirl rd n istifad etdik v qeyd etdik ki proqramın m tnin bu s tirl rin lav
ə ə ə
ə
ə
ə
ə
ə ə
ə
ə
olunması biz
ə
std::cout, std::cin, new , delete, strcpy ...
kimi funksiyalardan istifad etm y
ə
ə ə
imkan verir. H r-hansı bir funksiyadan proqramda istifad ed bilm k üçün proqrama bu
ə
ə
ə
ə
funksiyanın elanı (adı v parametrl rinin qeyd edildiyi s tir) v m tni (funksiyanın kod
ə
ə
ə
ə ə
hiss si) verilm lidir. Biz öz funksiyalarımızı t rtib ed rk n h m elanı, h m d m tni eyni
ə
ə
ə
ə ə
ə
ə
ə ə
faylda yerl şdirirdik. Kompilyator imkan veriri ki, biz ayrı-ayrı fayllarda elan olunmuş
ə
funksiya v d yiş nl r öz proqramımızdan müraci t ed bil k.
ə ə
ə ə ə
ə
ə
ə
Bunun üçün
#include
direktivind n istifad edirl r.
ə
ə
ə
#include
v ya
ə
#include"fayl.h"
kimi.
Bir qayda olaraq proqrama
#include
vast sil lav olunan faylların sonu .h il bitir. Sad
ə ə ə
ə
ə
ə
proqram nümun sin baxmağımız kifay tdir. İndiy kimi baxdığımız nümun l rd bütün
ə
ə
ə
ə
ə ə ə
proqram kodunu bir fayla yerl şdirirdik.
ə
İndi is biz iki v daha çox fayl lazım olacaq:
ə
ə
ə
D yiş nl rin, funksiyaların elan olunduğu başlıq fayllar v bu d yiş n v funksiyalara
ə
ə ə
ə
ə
ə
ə
müraci t ed n proqram kodu faylları.
ə
ə
Proqram 1.
menim_faylim.h faylının m tni
ə
// prg_11_1.cpp
/*bashliq fayli menim_faylim.h */
#ifndef MENIM_FAYLIM_H
#define MENIM_FAYLIM_H
int
yeni_deyishen;
#endif
proqram kodu prog2.cpp faylının mətni
#include
#include "menim_faylim.h"
int
main()
{
yeni_deyishen =
5
;
std::cout<<
" yeni deyishen "
<
"
\n
"
;
}
menim_faylim.h
faylındakı
#ifndef
#define
#endif
makrosları
menim_faylim.h
faylının bizim proqramam sonsuz lav olunmasının qarşısını
ə
ə
alır.
menim_faylim.h
başlıq faylında biz
int
tipli
yeni_deyishen
d yiş ni elan edirik. Daha
ə
ə
sonra
prog2.cpp
faylında
yeni_deyishen
d yiş nin müraci t edirik.
ə
ə
ə
ə
g r diqq t yetirdinizs biz iostream faylını
Ə ə
ə
ə
<
v
ə
>
vast sil ,
ə ə
menim_faylim.h
faylını is " v
ə
ə
" simvolları vast sil proqrama lav etdik. Bu kompilyatora
ə ə
ə
ə
menim_faylim.h
başlıq faylının
standart deyil,bizim t r fimizd n yaradıldığını bildirir v kompilyator bu faylı bizim
ə ə
ə
ə
proqram yerl ş n qovluqda axtarır.
ə ə
MAKROSLAR
C++ dilind istifad olunan dig r h miyy tli vasit l rd n biri d makroslardır. Makroslar
ə
ə
ə ə ə
ə
ə ə ə
ə
2 cür olur:
ş rt
ə
makrosları v
ə
t yin
ə
makrosları.
T yin makrosalrı
ə
T yin makrosalrı
ə
#define
direktivind n istifad olunaraq yaradılır. T yin makrosları h r
ə
ə
ə
ə
hansı bir ifad nin başqa ifad il v z edilm sin xidm t edir. Misal üçün g r biz
ə
ə ə ə ə
ə
ə
ə
ə ə
proqramın h r-hansı yerind
ə
ə
#define MAX_QIYMET 1024
s trini yerl şdiririks onda
ə
ə
ə
kompilyator proqramda
MAX_QIYMET
ifad sin rast g ldiyi bütün yerl rd onu
ə
ə
ə
ə ə
1024
il
ə
v z ed c k.
ə ə
ə ə
Sad proqrama baxaq:
ə
#define MAX 8
int
main()
{
int
i,x[MAX];
for
(i=
0
, i
x[i]=i;
return
0
;
}
Bu proqram 8 elementli tam tipli x c rg si elan edir v onun elementl rin 0-dan 7-y
ə ə
ə
ə ə
ə
kimi qiym tl r m nims dir.
ə ə
ə
ə
Ş rt makrosları
ə
Ş rt makrosları
ə
#
ifdef , #ifndef , #endif
direktivl d n istifad olunaraq yaradılır.Ş rt
ə ə
ə
ə
makrosları biz imkan verir ki, mü yy n ş rtd n asılı olaraq proqramın h r-hansı
ə
ə ə
ə ə
ə
hiss sinin kompilyator t r find n n z r alınmamasını t min ed k.
ə
ə ə
ə
ə ə ə
ə
ə
Sintaksis bel dir:
ə
Dostları ilə paylaş: |