
Trường Đại học Khoa học Tự nhiên
Khoa Công nghệ thông tin
Bộ môn Tin học cơ sở
1
Đặng Bình Phương
dbphuong@fit.hcmus.edu.vn
NHẬP MÔN LẬP TRÌNH
DỮ LIỆU KIỂU CON TRỎ
(NÂNG CAO)

VC
VC
&
&
BB
BB
22
Nội dung
Dữ liệu kiểu con trỏ (nâng cao)
Con tr c p 2ỏ ấ1
Con tr và m ng nhi u chi uỏ ả ề ề2
M ng con trả ỏ3
Con tr hàmỏ4

VC
VC
&
&
BB
BB
33
Con trỏ cấp 2 (con trỏ đến con trỏ)
Đặt vấn đề
Làm sao thay đổi giá trị của con trỏ (không
phải giá trị mà nó trỏ đến) sau khi gọi hàm?
Dữ liệu kiểu con trỏ (nâng cao)
void CapPhat(int *p, int n)
{
p = (int *)malloc(n * sizeof(int));
}
void main()
{
int *a = NULL;
CapPhat(a, 2);
// a v n = NULLẫ
}

VC
VC
&
&
BB
BB
44
NULL
Con trỏ cấp 2
Dữ liệu kiểu con trỏ (nâng cao)
……
int *a = NULL
0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17
int *p
int *p
int n
int nCapPhat
……
18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25
int *p
N
N
U
U
L
L
L
L
N
N
U
U
L
L
L
L
2
02
02
00
00
00
00
00
00
int n
22
22
00
00
00
00
00
00

VC
VC
&
&
BB
BB
55
Con trỏ cấp 2
Giải pháp
Sử dụng tham chiếu int *&p (trong C++)
Không thay đổi trực tiếp tham số mà trả về
Dữ liệu kiểu con trỏ (nâng cao)
int* CapPhat(int n)
{
int *p = (int *)malloc(n * sizeof(int));
return p;
}
void CapPhat(int *&p, int n)
{
p = (int *)malloc(n * sizeof(int));
}

