Professional Documents
Culture Documents
Con Tro Co Ban
Con Tro Co Ban
K THUT LP TRNH
&
VC
BB
Ni dung
Con tr v cu trc
&
VC
BB
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
34 12 00 00
a
&
VC
BB
Khi nim
a ch ca bin l mt con s.
Ta c th to bin khc lu a ch ca
bin ny Con tr.
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
34 12 00 00
a
0B 00 00 00
pa
&
VC
BB
Khai bo con tr
Khai bo
Ging nh mi bin khc, bin con tr mun
s dng cng cn phi c khai bo
<kiu d liu> *<tn bin con tr>;
V d
char *ch1, *ch2;
int *p1, p2;
&
VC
BB
Khai bo con tr
V d
&
VC
BB
Con tr NULL
Khi nim
Con tr NULL l con tr khng tr v u c.
Khc vi con tr cha c khi to.
int
int
int
int
n;
*p1 = &n;
*p2;
// unreferenced local variable
*p3 = NULL;
NULL
D liu kiu con tr (c bn)
&
VC
BB
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 &)
<tn bin con tr> = &<tn bin>;
V d
int a, b;
int *pa = &a, *pb;
pb = &b;
D liu kiu con tr (c bn)
&
S dng con tr
VC
BB
= &a;
pa); // Gi tr bin pa
*pa); // Gi tr vng nh pa tr n
&pa); // a ch bin pa
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
05 00 00 00
a
0B 00 00 00
pa
10
&
VC
BB
11
&
VC
BB
Cc cch truyn i s
12
&
VC
BB
int y
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
05 00 00 00 06 00 00 00
hoanvi
int x
int y
int t = x;
x = y;
y = t;
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
05 00 00 00 06 00 00 00
int a = 3
int b = 6
13
&
VC
BB
Cc cch truyn i s
14
&
VC
BB
int *y
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
0B 00 00 00 0F 00 00 00
hoanvi
int *x
int *y
int t = *x;
*x = *y;
*y = t;
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
05 00 00 00 06 00 00 00
int a = 3
int b = 6
15
&
VC
BB
Cc cch truyn i s
16
&
VC
BB
hoanvi
int &x
int &y
int t = x;
x = y;
y = t;
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
05 00 00 00 06 00 00 00
int a = 3
int b = 6
17
&
VC
BB
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.
18
&
VC
BB
Mng mt chiu
int array[3];
array
19
&
VC
BB
// Cch 1
// Cch 2
18 19 1A 1B 1C 1D 1E 1F
0B 00 00 00
parray
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
array
20
&
VC
BB
+2
+1
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
21
&
VC
BB
Php tr (gim)
n n * sizeof(<kiu d liu>)
C th s dng ton t gp = hoc
p = &array[2]
2
1
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
22
&
VC
BB
p2 = &array[2]
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
23
&
VC
BB
24
&
VC
BB
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int array[3];
25
&
VC
BB
V d nhp mng
void main()
{
int a[10], n = 10, *pa;
pa = a;
// hoc pa = &a[0];
for (int i = 0; i<n; i++)
scanf(%d, &a[i]);
scanf(%d, &pa[i]);
scanf(%d, a + i);
scanf(%d, pa + i);
scanf(%d, a++);
scanf(%d, pa++);
}
&a[i] (a + i) (pa + i) &pa[i]
D liu kiu con tr (c bn)
26
&
VC
BB
V d xut mng
void main()
{
int a[10], n = 10, *pa;
pa = a;
// hoc pa = &a[0];
27
&
VC
BB
Ch !
Mng mt chiu truyn cho hm l a ch ca
phn t u tin ch khng phi ton mng.
xut int a[3]
int a[]
int n
int *a
10 11 13 14 15 16 17 18 19 20 21 22 23 24
int array[3];
28
&
VC
BB
V d
void xuat(int a[10], int n)
{
for (int i = 0; i<n; i++)
printf(%d, *(a++));
}
void main()
{
int a[10], n = 10;
for (int i = 0; i<n; i++)
printf(%d, *(a++));
// OK
// Li
}
i s mng truyn cho hm khng phi hng
con tr.
D liu kiu con tr (c bn)
29
&
VC
BB
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(<kiu d
liu m n tr n>) (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.
D liu kiu con tr (c bn)
30
&
VC
BB
Con tr v cu trc
V d
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;
D liu kiu con tr (c bn)
31
&
VC
BB
Bi tp
32
&
Bi tp
VC
BB
Bi 2: Tm li
#include <stdio.h>
#include <conio.h>
void main()
{
int *x, y = 2;
*x = y;
*x += y++;
printf("%d %d", *x, y);
getch();
}
D liu kiu con tr (c bn)
33
&
VC
BB
Bi tp
34
&
VC
BB
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?
35
&
VC
BB
Bi tp
36
&
VC
BB
Bi tp
37
&
VC
BB
Bi tp
38
&
VC
BB
Bi tp
39
&
VC
BB
Bi tp
40