CHƯƠNG 5CHƯƠNG 5
CON TRỎCON TRỎ
(Pointers)(Pointers)
(Pointers)(Pointers)
1. Giớithiệu1. Giớithiệu
1.
Giới
thiệu1.
Giới
thiệu
y Mộtcontrỏ là 1biếnchứamột địachỉ bộ
nhớ. Địachỉ này là vị trí củamột đốitượn
g
khác trong bộ nhớ.
y Nếumộtbiếnchứa địachỉ củamộtbiếnkhác,
biếnthứ nhất đượcgọilàtrỏđếnbiếnthứ hai.
1. Giớithiệu1. Giớithiệu
1.
Giới
thiệu1.
Giới
thiệu
Đ
n con trn con tr
ỏỏ
2. Khai báo bi2. Khai báo bi
ếế
n con trn con tr
ỏỏ
y Cú pháp:
type *pointerVariable;
type
:xácđịnh kiểudữ liệucủabiếnmà
type
:
xác
định
kiểu
dữ
liệu
của
biến
mà
con trỏ trỏ đến.
y
Toán tử &
là toán tử 1 ngôi, trả về địa chỉ bộ
nhớ của toán hạn
g
của nó.
◦ Toán tử & dùng để gán địa chỉ của biến cho
biến con trỏ
Cú
p
há
p
:
pp
<Tên biến con trỏ>=&<Tên biến>
3. Toán t3. Toán t
ửử
con trcon tr
ỏỏ
((
pointer operatorspointer operators
))
3. Toán t3. Toán t
ửử
con trcon tr
ỏỏ
((
pointer operatorspointer operators
))
y
y
Toán tử *
: là toán tử một ngôi trả về giá trị
tại địa chỉ con trỏ trỏ đến.
Cú pháp
:
*<Tên biến con trỏ>
V
í d
ụ
:
a=*
p
;
ụ
p;
4. Các thao tác trên con trỏ4. Các thao tác trên con trỏ
4.
Các
thao
tác
trên
con
nh trên đư
ợ
c th
ự
c hi
ệ
n
,
cả
ọ ệ ợ ự ệ ,
hai p1 và p2 cùng trỏ đến biến x.
4. Các thao tác trên con trỏ4. Các thao tác trên con trỏ
4.
Các
thao
tác
trên
con
trỏ4.
Các
thao
liệ
ủ
ó
thướ
cc
ủ
a
kiể
u
dữ
liệ
uc
ủ
an
ó
.
4. Các thao tác trên con trỏ4. Các thao tác trên con trỏ
4.
Các
thao
tác
trên
con
trỏ4.
.
Cộng các con trỏ với một số nguyên:
1// ỏ dời đi1b
a = a +
1
;
//
con tr
ỏ
a
dời
đi
1
b
yte
b = b + 1;//con trỏ b dời đi 2 byte
c = c + 1; //con trỏ cdời đi4byte
c
=
c
+
1;
thao
tác
trên
con
trỏ
4. Các thao tác trên con trỏ4. Các thao tác trên con trỏ
4.
Các
thao
tác
trên
con
trỏ4.
Các
thao
tác
chỉ
ô
nhớ
mà
nó
trỏ
tới
chứ không phảilàgiátrị trỏ tới).
4. Các thao tác trên con trỏ4. Các thao tác trên con trỏ
4.
Các
thao
tác
trên
con
trỏ4.
Các
thao
tác
trên
tác
trên
con
trỏ4.
Các
thao
tác
trên
con
trỏ
#include <iostream.h>
#include<conio h>
#include<conio
.
h>
void main ()
{
int a = 20, b = 15, *pa, *pb, temp;
pa = &a; // con trỏ pa chứa địa chỉ của a
pb
=
cout << "a = " << a << endl;
cout << “b = ” << b;
m
à
n
hì
n
h
a = 15
b
=
20
}
b
20
5. Cấpphátbộ nhớ động5. Cấpphátbộ nhớ động
5.
Cấp
phát
bộ
nhớ
động5.
Cấp
n
h
c
ó
t
hể
dà
n
h
đ
ượct
hê
m
bộ
n
hớ
trong khi đang thựcthi,giảiphóngbộ nhớ khi
không
cần
thiết
không
cần
thiết
y C/C++ hổ trợ hai hệ thống cấpphátđộng:
một
hệ
thống
được
định
nghĩa
phát
bộ
nhớ
động
y Cấpphátđộng được định nghĩabởiC
−
Vùng nhớ Heap
đượcsử dụng cho việccấp
phát động các khốibộ nhớ trong thờigian
thựcthichươn
g
trình. Gọilàbộ nhớđộn
g
.
−
Hà
m
malloc
()
và
free
()
dùn
g
đ
ể
cấ
động
y Hàm malloc(): cấp phát bộ nhớ động.
ủ hà ó d
−Prototype c
ủ
a
hà
m c
ó
d
ạn
g
void *malloc(length)
length
:
là
số
byte
muốn
cấp
phát
−
length
:
là
số
byte
muốn
cấp
tiên
của
vùng
nhớđượccấppháttừ heap. Nếu không
thành côn
g
(
khôn
g
có đủ vùn
g
nhớ rỗi
y
êu
g
(g
g
y
cầu), hàm malloc() trả về null.
5. Cấpphátbộ nhớ động5. Cấpphátbộ nhớ động
5.
Cấp
phát
bộ
nhớ
phát
bộ
nhớ
động5.
Cấp
phát
bộ
nhớ
động
y Ví dụ:
int *p;
p
=
(
int *
)
malloc
(
50*sizeof
(
int
bộ
nhớ
động
y Kích thướccủaheapkhôngxácđịnh nên khi
ể
cấpphátbộ nhớ phảiki
ể
mtra
g
iá trị trả về
củahàmmalloc()để biếtlàbộ nhớ có được
cấp
phát
thành
công
hay
không
cấp
phát
thành
công
hay
không
.
Ví dụ:
p = (int *)malloc(100);
p
bộ
nhớ
động
y Hàm free(): Trả về vùng nhớ được cấp phát
bởi hàm malloc().
y Cú pháp:
v
oid free(void *p);
p là con trỏ đến vùng nhớ đã được cấp phát
trước đó bởi hàm malloc().
5. Cấpphátbộ nhớ động5. Cấpphátbộ nhớ động
5.
Cấp
phát
bộ
nhớ
động5.
Cấp
phát
bộ
phát trước đóbởitoántử new.
5. Cấpphátbộ nhớ động5. Cấpphátbộ nhớ động
5.
Cấp
phát
bộ
nhớ
động5.
Cấp
phát
bộ
nhớ
động
y Cú pháp:
p = new type;
delete
p
;
p
y plàmộtbiếncontrỏ nhận địachỉ của vùng
nhớ
động
y Ví dụ:
#incl de <iost eam h>
#incl
u
de
<iost
r
eam
.
h>
#include <new>
int main
()
()
{
int *p;
it// ll t f it
p = new
i
n
t
;
//
a
ll
delete p;
t0
re
t
urn
0
;
}
6. Con trỏ6. Con trỏ
voidvoid
((
void pointersvoid pointers
))
6.
Con
trỏ
6.
Con
trỏ
voidvoid
((
void
pointersvoid