4. VCVC
&&
BBBB
44
Kh叩i ni畛m con tr畛
Kh叩i ni畛m
畛a ch畛 c畛a bi畉n l m畛t con s畛.
Ta c坦 th畛 t畉o bi畉n kh叩c 畛 l動u 畛a ch畛 c畛a
bi畉n ny Con tr畛.
NMLT - Con tr畛 c董 b畉n
0A
3434
0B
1212
0C
0000
0D
0000
0E 0F 10 11 12 13 14 15 16 17
a pa
0B0B 0000 0000 0000
5. VCVC
&&
BBBB
55
Khai b叩o con tr畛
Khai b叩o
Gi畛ng nh動 m畛i bi畉n kh叩c, bi畉n con tr畛 mu畛n
s畛 d畛ng c滴ng c畉n ph畉i 動畛c khai b叩o
V鱈 d畛
ch1 v ch2 l bi畉n con tr畛, tr畛 t畛i v湛ng nh畛
ki畛u char (1 byte).
p1 l bi畉n con tr畛, tr畛 t畛i v湛ng nh畛 ki畛u int (4
bytes) c嘆n p2 l bi畉n ki畛u int b狸nh th動畛ng.
NMLT - Con tr畛 c董 b畉n
<ki畛u d畛 li畛u> *<t棚n bi畉n con tr畛>;
char *ch1, *ch2;
int *p1, p2;
6. VCVC
&&
BBBB
66
Khai b叩o con tr畛
S畛 d畛ng t畛 kh坦a typedef
V鱈 d畛
L動u 箪 khi khai b叩o ki畛u d畛 li畛u m畛i
Gi畉m b畛i r畛i khi m畛i ti畉p x炭c v畛i con tr畛.
Nh動ng d畛 nh畉m l畉n v畛i bi畉n th動畛ng.
NMLT - Con tr畛 c董 b畉n
typedef <ki畛u d畛 li畛u> *<t棚n ki畛u con tr畛>;
<t棚n ki畛u con tr畛> <t棚n bi畉n con tr畛>;
typedef int *pint;
int *p1;
pint p2, p3;
7. VCVC
&&
BBBB
77
Con tr畛 NULL
Kh叩i ni畛m
Con tr畛 NULL l con tr畛 kh担ng tr畛 v 但u c畉.
Kh叩c v畛i con tr畛 ch動a 動畛c kh畛i t畉o.
NMLT - Con tr畛 c董 b畉n
NULL
int n;
int *p1 = &n;
int *p2; // unreferenced local varialbe
int *p3 = NULL;
8. VCVC
&&
BBBB
88
Kh畛i t畉o ki畛u con tr畛
Kh畛i t畉o
Khi m畛i khai b叩o, bi畉n con tr畛 動畛c 畉t 畛 畛a
ch畛 no 坦 (kh担ng bi畉t tr動畛c).
ch畛a gi叩 tr畛 kh担ng x叩c 畛nh
tr畛 畉n v湛ng nh畛 kh担ng bi畉t tr動畛c.
畉t 畛a ch畛 c畛a bi畉n vo con tr畛 (to叩n t畛 &)
V鱈 d畛
NMLT - Con tr畛 c董 b畉n
<t棚n bi畉n con tr畛> = &<t棚n bi畉n>;
int a, b;
int *pa = &a, *pb;
pb = &b;
9. VCVC
&&
BBBB
99
S畛 d畛ng con tr畛
Truy xu畉t 畉n 担 nh畛 m con tr畛 tr畛 畉n
Con tr畛 ch畛a m畛t s畛 nguy棚n ch畛 畛a ch畛.
V湛ng nh畛 m n坦 tr畛 畉n, s畛 d畛ng to叩n t畛 *.
V鱈 d畛
NMLT - Con tr畛 c董 b畉n
int a = 5, *pa = &a;
printf(%dn, pa); // Gi叩 tr畛 bi畉n pa
printf(%dn, *pa); // Gi叩 tr畛 v湛ng nh畛 pa tr畛 畉n
printf(%dn, &pa); // 畛a ch畛 bi畉n pa
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
a pa
0B0B 0000 0000 00000505 0000 0000 0000
10. VCVC
&&
BBBB
1010
K鱈ch th動畛c c畛a con tr畛
K鱈ch th動畛c c畛a con tr畛
Con tr畛 ch畛 l動u 畛a ch畛 n棚n k鱈ch th動畛c c畛a
m畛i con tr畛 l nh動 nhau:
M担i tr動畛ng MD-DOS (16 bit): 2 bytes
M担i tr動畛ng Windows (32 bit): 4 bytes
NMLT - Con tr畛 c董 b畉n
char *p1;
int *p2;
float *p3;
double *p4;
11. VCVC
&&
BBBB
1111
C叩c c叩ch truy畛n 畛i s畛
Truy畛n gi叩 tr畛 (tham tr畛)
NMLT - Con tr畛 c董 b畉n
#include <stdio.h>
void hoanvi(int x, int y);
void main()
{
int a = 5; 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;
}
12. VCVC
&&
BBBB
1212
int t = x;
x = y;
y = t;
Truy畛n gi叩 tr畛 (tham tr畛)
NMLT - Con tr畛 c董 b畉n
0505 0000 0000 0000 0606 0000 0000 0000
int a = 5
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int xint x int yint yhoanvi
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
int x int y
0505 0000 0000 0000 0606 0000 0000 0000
13. VCVC
&&
BBBB
1313
C叩c c叩ch truy畛n 畛i s畛
Truy畛n 畛a ch畛 (con tr畛)
NMLT - Con tr畛 c董 b畉n
#include <stdio.h>
void hoanvi(int *x, int *y);
void main()
{
int a = 2912; b = 1706;
hoanvi(&a, &b);
printf(a = %d, b = %d, a, b);
}
void hoanvi(int *x, int *y)
{
int t = *x; *x = *y; *y = t;
}
14. VCVC
&&
BBBB
1414
int t = *x;
*x = *y;
*y = *t;
Truy畛n 畛a ch畛 (con tr畛)
NMLT - Con tr畛 c董 b畉n
int a = 5
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int *xint *x int *yint *yhoanvi
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
int *x int *y
0B0B 0000 0000 0000 0F0F 0000 0000 0000
0505 0000 0000 0000 0606 0000 0000 0000
15. VCVC
&&
BBBB
1515
C叩c c叩ch truy畛n 畛i s畛
Truy畛n tham chi畉u (C++)
NMLT - Con tr畛 c董 b畉n
#include <stdio.h>
void hoanvi(int &x, int &y);
void main()
{
int a = 2912; b = 1706;
hoanvi(a, b);
printf(a = %d, b = %d, a, b);
}
void hoanvi(int &x, int &y)
{
int t = x; x = y; y = t;
}
16. VCVC
&&
BBBB
1616
int t = x;
x = y;
y = t;
Truy畛n tham chi畉u (C++)
NMLT - Con tr畛 c董 b畉n
int a = 5
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int b = 6
int &xint &x int &yint &yhoanvi
0505 0000 0000 0000 0606 0000 0000 0000
17. VCVC
&&
BBBB
1717
M畛t s畛 l動u 箪
M畛t s畛 l動u 箪
Con tr畛 l kh叩i ni畛m quan tr畛ng v kh坦 nh畉t
trong C. M畛c 畛 thnh th畉o C 動畛c 叩nh gi叩
qua m畛c 畛 s畛 d畛ng con tr畛.
N畉m r探 quy t畉c sau, v鱈 d畛 int a, *pa = &a;
*pa v a 畛u ch畛 n畛i dung c畛a bi畉n a.
pa v &a 畛u ch畛 畛a ch畛 c畛a bi畉n a.
Kh担ng n棚n s畛 d畛ng con tr畛 khi ch動a 動畛c
kh畛i t畉o. K畉t qu畉 s畉 kh担ng l動畛ng tr動畛c
動畛c.
NMLT - Con tr畛 c董 b畉n
int *pa; *pa = 1904;
18. VCVC
&&
BBBB
1818
Con tr畛 v m畉ng m畛t chi畛u
M畉ng m畛t chi畛u
T棚n m畉ng array l m畛t h畉ng con tr畛
kh担ng th畛 thay 畛i gi叩 tr畛 c畛a h畉ng ny.
array l 畛a ch畛 畉u ti棚n c畛a m畉ng
array == &array[0]
NMLT - Con tr畛 c董 b畉n
int array[3];
array
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17