Professional Documents
Culture Documents
KTLT C13 ConTroCoBan - PPT (By Bsquochoai - Ga)
KTLT C13 ConTroCoBan - PPT (By Bsquochoai - Ga)
KTLT C13 ConTroCoBan - PPT (By Bsquochoai - Ga)
K THUT LP TRNH
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
1
&
VC
BB
Ni dung
4 Con tr v cu trc
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)
3
&
VC
BB
Khai bo bin trong C
34 12 00 00
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 0B 00 00 00
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;
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)
6
&
VC
BB
Khai bo con tr
V d
typedef int *pint;
int *p1;
pint p2, p3;
Khi nim
Con tr NULL l con tr khng tr v u c.
Khc vi con tr cha c khi to.
int n;
int *p1 = &n;
int *p2; // unreferenced local variable
int *p3 = NULL;
NULL
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)
9
&
VC
BB
S dng con tr
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
05 00 00 00 0B 00 00 00
10
a pa D liu kiu con tr (c bn)
&
VC
BB
Kch thc ca con tr
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;
}
D liu kiu con tr (c bn)
12
&
VC
BB
Truyn gi tr (tham tr)
int x int y
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
05 00 00 00 06 00 00 00
int t = x;
hoanvi int x int y 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
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;
}
D liu kiu con tr (c bn)
14
&
VC
BB
Truyn a ch (con tr)
int *x int *y
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
0B 00 00 00 0F 00 00 00
int t = *x;
hoanvi int *x int *y *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
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;
}
D liu kiu con tr (c bn)
16
&
VC
BB
Truyn tham chiu (C++)
int t = x;
hoanvi int &x int &y 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
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.
int *pa; *pa = 1904; // !!!
Mng mt chiu
int array[3];
0B 00 00 00
parray
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
+1
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
Php tr (gim)
n n * sizeof(<kiu d liu>)
C th s dng ton t gp = hoc
p = &array[2]
2
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
V d nhp mng
void main()
{
int a[10], n = 10, *pa;
pa = a; // hoc pa = &a[0];
V d xut mng
void main()
{
int a[10], n = 10, *pa;
pa = a; // hoc pa = &a[0];
for (int i = 0; i<n; i++)
printf(%d, a[i]);
printf(%d, pa[i]);
printf(%d, *(a + i));
printf(%d, *(pa + i));
printf(%d, *(a++));
printf(%d, *(pa++));
}
a[i] *(a + i) *(pa + i) pa[i]
D liu kiu con tr (c bn)
27
&
VC
BB
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.
10 11 13 14 15 16 17 18 19 20 21 22 23 24
V d
void xuat(int a[10], int n)
{
for (int i = 0; i<n; i++)
printf(%d, *(a++)); // OK
}
void main()
{
int a[10], n = 10;
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
Bi 2: Tm li
#include <stdio.h>
#include <conio.h>
void main()
{
int *x, y = 2;
*x = y;
*x += y++;
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?