
VC
VC &
&
BB
BB
33
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 (2
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;
VC
VC &
&
BB
BB
44
Con trỏ NULL
Khái niệ m
Con trỏ NULL là con trỏ không trỏ vào đâ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;

VC
VC &
&
BB
BB
55
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ỉ
nào đó (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 vào 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;
VC
VC &
&
BB
BB
66
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(“%d\n”, pa); // Giá trị biế n pa
printf(“%d\n”, *pa); // Giá trị vùng nhớ pa trỏ đế n
printf(“%d\n”, &pa); // Đị a chỉ biế n pa
……
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
a pa
0B
0B 00
00 00
00 00
00
05
05 00
00 00
00 00
00

VC
VC &
&
BB
BB
77
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): 2bytes
• Môi trư ờ ng Windows (32 bit): 4bytes
NMLT - Con trỏ cơ bả n
char *p1;
int *p2;
float *p3;
double *p4;
…
VC
VC &
&
BB
BB
88
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;
}

VC
VC &
&
BB
BB
99
Các cách truyền đối số
Truyề n tham chiế u
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;
}
VC
VC &
&
BB
BB
1010
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 = 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;
}