con tro co ban
Post on 14-Nov-2015
218 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
B mn Cng ngh phn mm Khoa Cng ngh thng tin Trng i hc Khoa hc T nhin
1
ThS. ng Bnh Phng dbphuong@fit.hcmus.edu.vn
K THUT LP TRNH
D LIU KIU CON TR (C BN)
-
VC
&
BB
2 2
Ni dung
D liu kiu con tr (c bn)
Khi nim v cch s dng 1
Cc cch truyn i s cho hm 2
Con tr v mng mt chiu 3
Con tr v cu trc 4
-
VC
&
BB
3 3
Kin trc my tnh
B nh my tnh B nh RAM cha rt nhiu nh, mi nh
c kch thc 1 byte. RAM dng cha mt phn h iu hnh,
cc lnh chng trnh, cc d liu Mi nh c a ch duy nht v a ch ny
c nh s t 0 tr i. V d
RAM 512MB c nh a ch t 0 n 229 1 RAM 2GB c nh a ch t 0 n 231 1
D liu kiu con tr (c bn)
-
VC
&
BB
4 4
Quy trnh x l ca trnh bin dch Dnh ring mt vng nh vi a ch duy nht
lu bin . Lin kt a ch nh vi tn bin. Khi gi tn bin, n s truy xut t ng n
nh lin kt vi tn bin. V d: int a = 0x1234; // Gi s a ch 0x0B
Khai bo bin trong C
D liu kiu con tr (c bn)
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
a
34 12 00 00
-
VC
&
BB
5 5
Khi nim con tr
Khi nim a ch ca bin l mt con s. Ta c th to bin khc lu a ch ca
bin ny Con tr.
D liu kiu con tr (c bn)
0A
34
0B
12
0C
00
0D
00
0E 0F 10 11 12 13 14 15 16 17
a pa
0B 00 00 00
-
VC
&
BB
6 6
Khai bo con tr
Khai bo Ging nh mi bin khc, bin con tr mun
s dng cng cn phi c khai bo
V d
ch1 v ch2 l bin con tr, tr ti vng nh kiu char (1 byte). p1 l bin con tr, tr ti vng nh kiu int (4
bytes) cn p2 l bin kiu int bnh thng. D liu kiu con tr (c bn)
*;
char *ch1, *ch2;
int *p1, p2;
-
VC
&
BB
7 7
Khai bo con tr
S dng t kha typedef
V d
Lu khi khai bo kiu d liu mi Gim bi ri khi mi tip xc vi con tr. Nhng d nhm ln vi bin thng.
D liu kiu con tr (c bn)
typedef *; ;
typedef int *pint;
int *p1;
pint p2, p3;
-
VC
&
BB
8 8
Con tr NULL
Khi nim Con tr NULL l con tr khng tr v u c. Khc vi con tr cha c khi to.
D liu kiu con tr (c bn)
NULL
int n;
int *p1 = &n;
int *p2; // unreferenced local variable
int *p3 = NULL;
-
VC
&
BB
9 9
Khi to kiu con tr
Khi to Khi mi khai bo, bin con tr c t a
ch no (khng bit trc). cha gi tr khng xc nh tr n vng nh khng bit trc. t a ch ca bin vo con tr (ton t &)
V d
D liu kiu con tr (c bn)
= &;
int a, b;
int *pa = &a, *pb;
pb = &b;
-
VC
&
BB
10 10
S dng con tr
Truy xut n nh m con tr tr n Con tr cha mt s nguyn ch a ch. Vng nh m n tr n, s dng ton t *.
V d
D liu kiu con tr (c bn)
int a = 5, *pa = &a; printf(%d\n, pa); // Gi tr bin pa printf(%d\n, *pa); // Gi tr vng nh pa tr n printf(%d\n, &pa); // a ch bin pa
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
a pa
0B 00 00 00 05 00 00 00
-
VC
&
BB
11 11
Kch thc ca con tr
Kch thc ca con tr
Con tr ch lu a ch nn kch thc ca mi con tr l nh nhau: Mi trng MD-DOS (16 bit): 2 bytes (64KB) Mi trng Windows (32 bit): 4 bytes (4GB)
D liu kiu con tr (c bn)
char *p1;
int *p2;
float *p3;
double *p4;
-
VC
&
BB
12 12
Cc cch truyn i s
Truyn gi tr (tham tr)
D liu kiu con tr (c bn)
#include
void hoanvi(int x, int y);
void main()
{
int a = 3; b = 6;
hoanvi(a, b);
printf(a = %d, b = %d, a, b); }
void hoanvi(int x, int y)
{
int t = x; x = y; y = t;
}
-
VC
&
BB
13 13
int t = x; x = y; y = t;
Truyn gi tr (tham tr)
D liu kiu con tr (c bn)
05 00 00 00 06 00 00 00
int a = 3
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int x int y hoanvi
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
int x int y
05 00 00 00 06 00 00 00
-
VC
&
BB
14 14
Cc cch truyn i s
Truyn a ch (con tr)
D liu kiu con tr (c bn)
#include
void hoanvi(int *x, int *y);
void main()
{
int a = 3; b = 6;
hoanvi(&a, &b);
printf(a = %d, b = %d, a, b); }
void hoanvi(int *x, int *y)
{
int t = *x; *x = *y; *y = t;
}
-
VC
&
BB
15 15
int t = *x; *x = *y; *y = t;
Truyn a ch (con tr)
D liu kiu con tr (c bn)
int a = 3
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int *x int *y hoanvi
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
int *x int *y
0B 00 00 00 0F 00 00 00
05 00 00 00 06 00 00 00
-
VC
&
BB
16 16
Cc cch truyn i s
Truyn tham chiu (C++)
D liu kiu con tr (c bn)
#include
void hoanvi(int &x, int &y);
void main()
{
int a = 3; b = 6;
hoanvi(a, b);
printf(a = %d, b = %d, a, b); }
void hoanvi(int &x, int &y)
{
int t = x; x = y; y = t;
}
-
VC
&
BB
17 17
int t = x; x = y; y = t;
Truyn tham chiu (C++)
D liu kiu con tr (c bn)
int a = 3
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int &x int &y hoanvi
05 00 00 00 06 00 00 00
-
VC
&
BB
18 18
Mt s lu
Mt s lu Con tr l khi nim quan trng v kh nht
trong C. Mc thnh tho C c nh gi qua mc s dng con tr. Nm r quy tc sau, v d int a, *pa = &a;
*pa v a u ch ni dung ca bin a. pa v &a u ch a ch ca bin a.
Khng nn s dng con tr khi cha c khi to. Kt qu s khng lng trc c.
D liu kiu con tr (c bn)
int *pa; *pa = 1904; // !!!
-
VC
&
BB
19 19
Con tr v mng mt chiu
Mng mt chiu
Tn mng array l mt hng con tr khng th thay i gi tr ca hng ny. Gi tr ca array l a ch phn t u tin
ca mng array == &array[0]
D liu kiu con tr (c bn)
int array[3];
array
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
-
VC
&
BB
20 20
Con tr n mng mt chiu
Con tr v mng mt chiu
D liu kiu con tr (c bn)
int array[3], *parray;
parray = array; // Cch 1
parray = &array[0]; // Cch 2
array
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
18 19 1A 1B 1C 1D 1E 1F
parray
0B 00 00 00
-
VC
&
BB
21 21
Php cng (tng) + n + n * sizeof() C th s dng ton t gp += hoc ++
+2
Php ton s hc trn con tr
D liu kiu con tr (c bn)
p = array
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
+1
int array[3];
-
VC
&
BB
22 22
Php tr (gim) n n * sizeof() C th s dng ton t gp = hoc
Php ton s hc trn con tr
D liu kiu con tr (c bn)
p = &array[2]
1 2
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
-
VC
&
BB
23 23
p2 = &array[2] p1 = array
Php ton tnh khong cch gia 2 con tr *p1, *p2; p1 p2 cho ta khong cch (theo s phn t)
gia hai con tr (cng kiu)
Php ton s hc trn con tr
D liu kiu con tr (c bn)
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
p1 p2= (0B 13)/sizeof(int) = 2
p2 p1= (13 0B)/sizeof(int) = +2
-
VC
&
BB
24 24
Cc php ton khc Php so snh: So snh a ch gia hai con
tr (th t nh) == != > >= <
-
VC
&
BB
25 25
Truy xut n phn t th n ca mng int array[3], n = 2, *p = array; array[n] == p[n] == *(p + n)
Con tr v mng mt chiu
D liu kiu con tr (c bn)
p
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
+ 2 ) ( *
-
VC
&
BB
26 26
Con tr v mng mt chiu
V d nhp mng
D liu kiu con tr (c bn)
void main()
{
int a[10], n = 10, *pa;
pa = a; // hoc pa = &a[0];
for (int i = 0; i
-
VC
&
BB
27 27
Con tr v mng mt chiu
V d xut mng
D liu kiu con tr (c bn)
void main()
{
int a[10], n = 10, *pa;
pa = a; // hoc pa = &a[0]; for (int i = 0; i
-
VC
&
BB
28 28
Truyn mng 1 chiu cho hm
Ch ! Mng mt chiu truyn cho hm l a ch ca
phn t u tin ch khng phi ton mng.
D liu kiu con tr (c bn)
10 11 13 14 15 16 17 18 19 20 21 22 23 24
int array[3];
int a[3] int n xut
int a[] int *a
-
VC
&
BB
29 29
i s mng truyn cho hm
V d
D liu kiu con tr (c bn)
void xuat(int a[10], int n)
{
for (int i = 0; i
-
VC
&
BB
30 30
Lu Khng thc hin cc php ton *, /, %. Tng/gim con tr n n v c ngha l
tng/gim gi tr ca n n*sizeof() (bytes) Khng th tng/gim bin mng (con tr
hng). Hy gn mt con tr n a ch u ca mng v tng/gim con tr . i s mng mt chiu truyn cho hm l a
ch phn t u tin ca mng.
Con tr v mng mt chiu
D liu kiu con tr (c bn)
-
VC
&
BB
31 31
Con tr v cu trc
Truy xut bng 2 cch
V d
D liu kiu con tr (c bn)
typedef struct
{
int tu, mau;
} PHANSO;
PHANSO ps1, *ps2 = &ps1; // ps2 l con tr
ps1.tu = 1; ps1.mau = 2;
ps2->tu = 1; ps2->mau = 2;
(*ps2).tu = 1; (*ps2).mau = 2;
-> (*).
-
VC
&
BB
32 32
Bi tp
Bi 1: Cho on chng trnh sau: float pay;
float *ptr_pay;
pay=2313.54;
ptr_pay = &pay;
Hy cho bit gi tr ca: a. pay
b. *ptr_pay
c. *pay
d. &pay
D liu kiu con tr (c bn)
-
VC
&
BB
33 33
Bi tp
Bi 2: Tm li
D liu kiu con tr (c bn)
#include
#include
void main()
{
int *x, y = 2;
*x = y;
*x += y++;
printf("%d %d", *x, y);
getch();
}
-
VC
&
BB
34 34
Bi tp
Bi 3: Cho on chng trnh sau: int *pint;
float f;
char c;
double *pd;
Hy chn pht biu sai c php: a. f = *pint;
b. c = *pd;
c. *pint = *pd;
d. pd = f;
D liu kiu con tr (c bn)
-
VC
&
BB
35 35
Bi tp
Bi 4: Ton t no dng xc nh a ch ca mt bin?
Bi 5: Ton t no dng xc nh gi tr ca
bin do con tr tr n? Bi 6: Php ly gi tr gin tip l g?
D liu kiu con tr (c bn)
-
VC
&
BB
36 36
Bi tp
Bi 7: Cc phn t trong mng c sp xp trong b nh nh th no?
Bi 8: Cho mng mt chiu data. Trnh by 2 cch ly a ch phn t u tin ca mng ny.
D liu kiu con tr (c bn)
-
VC
&
BB
37 37
Bi tp
Bi 9: Trnh by 6 loi php ton c th thc hin trn con tr?
1. 2. 3. 4. 5. 6.
D liu kiu con tr (c bn)
-
VC
&
BB
38 38
Bi tp
Bi 10: Cho con tr p1 tr n phn t th 3 cn con tr p2 tr n phn t th 4 ca mng int th p2 p1 = ?
Bi 11: Ging nh cu trn nhng i vi mng float?
D liu kiu con tr (c bn)
-
VC
&
BB
39 39
Bi tp
Bi 12: Trnh by khai bo con tr pchar tr n kiu char.
Bi 13: Cho bin cost kiu int. Khai bo v khi
to con tr pcost tr n bin ny. Bi 14: Gn gi tr 100 cho bin cost s dng
hai cch trc tip v gin tip. Trc tip: Gin tip:
D liu kiu con tr (c bn)
-
VC
&
BB
40 40
Bi tp
Bi 15: In gi tr ca con tr v gi tr ca bin m n tr ti.
Bi 16: S dng con tr lm li cc bi tp v
mng mt chiu. Nhp/Xut mng Tm phn t tha yu cu Tnh tng/m cc phn t tha yu cu Sp xp tng/gim
D liu kiu con tr (c bn)
top related