Professional Documents
Culture Documents
Chapter 10
Pointers and
Dynamic Arrays
Mc tiu bi hc
Con tr
Bin con tr
Qun l b nh
Mng ng
To v s dng
S hc con tr
DTH
INT2202
DTH
INT2202
Bin con tr
Con tr c nh kiu
C th lu con tr trong bin
Khng phi bin int, double, ...
m l con tr ti int, double,
V d:
double *p;
Khai bo p l bin kiu con tr ti double
N c th lu gi tr con tr ti bin double
Khng lu c con tr ti cc kiu khc!
DTH
INT2202
DTH
INT2202
a ch v gi tr s
Con tr l mt a ch
a ch l mt s nguyn
Con tr khng phi l mt s nguyn!
C++ bt buc s dng con tr nh a ch
Khng th dng n nh gi tr s
Mc d n thc cht l mt gi tr s
DTH
INT2202
Tr
V mt thut ng
Ta t p trung vo ti vic tr ch khng phi bn thn
a ch
Bin con tr tr ti bin thng
B qua bn lun v a ch
Khin vic trc quan ha r rng hn
Thy" tham chiu ti vng nh
Mi tn
DTH
INT2202
Tr
int *p1, *p2, v1, v2;
p1 = &v1;
Ch nh con tr p1 tr ti bin int v1
Ton t &
Xc nh a ch ca bin
Cch c:
DTH
INT2202
Tr
V d:
int *p1, *p2, v1, v2;
p1 = &v1;
Ton t dereference *
DTH
INT2202
V d: Tr
Xt on m:
v1 = 0;
p1 = &v1;
*p1 = 42;
cout << v1 << endl;
cout << *p1 << endl;
Kt qu:
42
42
*p1 v v1 l mt bin
DTH
INT2202
Ton t &
L ton t ly a ch
Cng dng ch nh tham s truyn bng tham chiu
Khng phi l trng hp ngu nhin!
Nhc li: truyn tham chiu thc cht truyn a ch
ca i s thc s vo hm
2 cch dng ton t ny c lin h mt thit
DTH
INT2202
Gn con tr
C th gn bin con tr:
int *p1, *p2;
p2 = p1;
Gn mt con tr cho con tr khc
Ch nh p2 tr ti ni m p1 ang tr ti"
D b ln vi:
*p2 = *p1;
Gn gi tr tr bi p1 cho gi tr tr bi p2
DTH
INT2202
DTH
INT2202
Ton t new
V con tr c th tham chiu ti bin
Khng thc s cn phi c nh danh chun cho bin
p1 = new int;
To ra mt bin khng tn v gn p1 tr ti n
C th lm vic vi bin thng qua *p1
Dng nh bin thng
DTH
INT2202
DTH
INT2202
DTH
INT2202
Hnh minh ha
thao tc c bn
trn con tr:
Display 10.3
Gii thch
Display 10.2
DTH
INT2202
DTH
//Khi to *n bng 17
INT2202
Con tr v hm
Con tr l kiu d liu hon chnh
C th dng n nh cc kiu khc
N c th l tham s ca hm
C th l kiu tr v ca hm
V d:
int* findOtherPointer(int* p);
Hm ny khai bo:
C tham s kiu con tr tr ti int
Tr v bin con tr tr ti int
DTH
INT2202
Qun l b nh
Heap
Cn c gi l "freestore"
Dnh ring cho cc bin cp pht ng
Tt c cc bin cp pht ng mi u c t trong freestore
Nu nhiu qu chim ton b vng nh freestore
DTH
INT2202
DTH
INT2202
DTH
INT2202
DTH
INT2202
Ton t delete
Gii phng b nh ng
Khi khng cn cn na
Tr li vng nh cho freestore
V d:
int *p;
p = new int(5);
// X l g
delete p;
DTH
INT2202
Con tr lc
delete p;
Hy vng nh ng
Nhng p vn tr ti !
Gi l con tr lc
Hy trnh con tr lc
DTH
INT2202
Bin cc b
Thng gi l bin t ng
DTH
INT2202
DTH
INT2202
ngn xp
heap
d liu
vn bn
(m ngun dch )
a ch di
DTH
INT2202
DTH
INT2202
Li thng gp:
Tham s con tr truyn gi tr
Hot ng tinh vi v phin h
Nu hm bin i tham s con tr th ch bn sao ca
n b bin i
V d minh ha
DTH
INT2202
DTH
INT2202
DTH
INT2202
DTH
INT2202
Mng ng
Bin mng
Thc ra l bin con tr
Mng chun
Kch thc c nh
Mng ng
Kch thc khng xc nh thi im lp trnh
M xc nh khi chy chng trnh
DTH
INT2202
Bin mng
Nhc li: mng lu trong cc nh lin tip
Bin mng tham chiu ti phn t u tin
Suy ra bin mng l mt kiu bin con tr!
V d:
int a[10];
int * p;
a v p u l bin con tr!
DTH
INT2202
DTH
INT2202
DTH
INT2202
Mng ng
Hn ch ca mng chun
Phi ch nh kch thc
Thc t ta c th khng bit kch thc trc khi
chy chng trnh!
Phi c lng kch thc ti a c th cn n
i khi n, i khi khng
Lng ph b nh
Mng ng
C th dn hay co khi cn
DTH
INT2202
To mng ng
Rt n gin!
Dng ton t new
V d:
typedef double * DoublePtr;
DoublePtr d;
d = new double[10]; // kch thc trong cp ngoc vung
To bin mng cp pht ng d c 10 phn t, kiu c s l
double
DTH
INT2202
Xa mng ng
Cp pht ng khi chy chng trnh
th nn c hy khi chy chng trnh
Thao tc xa rt n gin. V d:
d = new double[10];
//Processing
delete [] d;
Gii phng tt c vng nh ca mng ng ny
Cp ngoc vung bo hiu c mng
Nhc li: d vn tr ti vng nh !
Sau khi delete, cn gn d = NULL;
DTH
INT2202
Hm tr v mt mng
Ta khng c php tr v kiu mng trong hm
V d:
int [] someFunction(); // Khng hp l!
C th thay bng tr v con tr ti mng c cng kiu c
s:
int* someFunction(); // Hp l!
DTH
INT2202
S hc con tr
C th thc hin cc php ton s hc trn con tr
S hc a ch
V d:
typedef double* DoublePtr;
DoublePtr d;
d = new double[10];
d cha a ch ca d[0]
d + 1 bng a ch ca d[1]
d + 2 bng a ch ca d[2]
Tng ng vi a ch ca cc phn t
DTH
INT2202
Tng ng:
for (int i = 0; i < arraySize; i++)
cout << d[i] << " " ;
DTH
INT2202
DTH
INT2202
Lp
Ton t ->
K hiu vit tt
DTH
INT2202
Con tr this
Trong nh ngha hm thnh vin i khi ta cn tham
chiu n chnh i tng ang gi ti n
Dng con tr this c sn
T ng tr ti i tng ang gi:
class Simple
{
public:
void showStuff() const;
private:
int stuff;
};
DTH
INT2202
Np chng ton t gn
Ton t gn tr v tham chiu
c th c nhiu php gn ni nhau
V d: a = b = c;
Gn a v b bng c
Ton t phi tr v cng kiu v tri n
c th gn ni nhau
Con tr this s hu ch trong trng hp ny
DTH
INT2202
Np chng ton t gn
Nhc li: Ton t gn phi l thnh vin ca lp
N c 1 tham s
V tri l i tng gi ti ton t
s1 = s2;
C th ngh n l: s1.=(s2);
s1 = s2 = s3;
Cn c (s1 = s2) = s3;
Do (s1 = s2) phi tr v i tng c kiu nh s1
Ri truyn = s3 vo;
DTH
INT2202
StringClass
DTH
INT2202
INT2202
Sao chp su
Khi lin quan ti con tr v cp pht ng
Phi gii tham chiu bin con tr ri sao chp vng d liu c
con tr tr ti
Hy t np chng ton t gn v hm kin to sao chp nu
gp trng hp ny!
DTH
INT2202
Hm hy
Cc bin cp pht ng
Khng bin mt nu khng c delete tng minh
Nu con tr l d liu thnh vin private
Chng cp pht ng d liu thc
Trong hm kin to
Phi c cch no gii phng vng nh khi i
tng b hy
Cu tr li: Vit hm hy.
DTH
INT2202
Hm hy
Ngc li vi hm kin to
c gi t ng khi i tng ra ngoi phm vi hot ng
Phin bn mc nh ch xa cc bin thng, khng xa cc
bin ng
DTH
INT2202
T ng gi khi:
DTH
Tm tt 1
Con tr l a ch nh
Cho ta cch tham chiu gin tip ti bin
Bin ng
c to v hy khi chy chng trnh
Freestore
Vng nh cho bin ng
Mng cp pht ng
C kch thc ch nh khi chy chng trnh
DTH
INT2202
Tm tt 2
Hm hy
L hm thnh vin c bit ca lp
T ng hy i tng
L hm thnh vin mt i s
c gi t ng khi cn bn sao tm thi
Ton t gn
DTH
INT2202
Chun b bi ti
c chng 12 gio trnh: c/ghi trn lung v tp
DTH
INT2202