Trường Đại hc Khoa hc T nhiên
Khoa Công ngh thông tin
B môn Tin hc cơ s
1
Đặng Bình Phương
dbphuong@fit.hcmus.edu.vn
NHP MÔN LP TRÌNH
D LIU KIU CON TR
(NÂNG CAO)
VC
VC
&
&
BB
BB
22
Ni dung
D liu kiu 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àm4
VC
VC
&
&
BB
BB
33
Con tr cp 2 (con tr đến con tr)
Đặt vn đề
Làm sao thay đổi giá tr ca con tr (không
phi giá tr mà nó tr đến) sau khi gi hàm?
D liu kiu 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 cp 2
D liu kiu 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 cp 2
Gii pháp
S dng tham chiếu int *&p (trong C++)
Không thay đổi trc tiếp tham s mà tr v
D liu kiu 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));
}