Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 12: Pointer
CHÖÔNG 12
POINTER
CHÖÔNG 12
POINTER
12.1 Khaùi nieäm
12.7 Pointer vaø vieäc ñònh vò
boä nhôù ñoäng
12.2 Thao taùc treân POINTER
12.3 POINTER vaø maûng
12.4 Ñoái soá cuûa haøm laø pointer -
truyeàn ñoái soá theo soá daïng tham
soá bieán
12.8 Maûng caùc pointer
12.9 Pointer cuûa pointer
12.10 Ñoái soá cuûa haøm MAIN
12.11 Pointer troû ñeán haøm
12.12 ÖÙng duïng
12.5 Haøm traû veà pointer vaø
maûng
12.6 Chuoãi kyù töï
Baøi taäp cuoái chöông
CHÖÔNG 12
POINTER
12.1 KHAÙI NIEÄM
Trong ngoân ngöõ Cmoãben vachuoãkù töï ñeàu ñöôïc löu
tröõ trong boä nhôù vaø coù ñòa chæ rieâng, ñòa chæ naøy xaùc ñònh
vò trí cuûa chuùng trong boä nhôù. Khi laäp trình trong C, nhieàu
luùc chuùng ta caàn laøm vieäc vôùi caùc ñòa chæ naøy, vaø C uûng hoä
ñieàu ñoù khi ñöa ra kieåu döõ lieäu pointer (taïm dòch laø con
troû) ñeå khai baùo cho caùc bieán löu ñòa chæ.
CHÖÔNG 12
POINTER
12.1 KHAÙI NIEÄM
Moät bieán coù kieåu poiner coù heöu ñöôc döõ lieäu trong noù,
laø ñòa chæ cuûa moät ñoái töôïng ñang khaûo saùt. Ñoái töôïng ñoù
coù theå laø moät bieán, moät chuoãi hoaëc moät haøm.
CHÖÔNG 12
POINTER
12.1 KHAÙI NIEÄM
Ví duï 13.1: Chöông trình ñoåi trò
void Swap (int doi_1, int doi_2);
main()
{ int a = 3, b = 4;// Khai baùo vaø khôûi ñoäng trò
// In trò tröôùc khi goïi haøm
printf (“Tröôùc khi goïi haøm, trò cuûa bieán a = %d, b = %d.\n”);
// Goïi haøm ñoåi trò
Swap (a, b); // In trò sau khi goïi haøm
printf (“Sau khi goïi haøm, trò cuûa bieán a = %d, b = %d.\n”);}
CHÖÔNG 12
POINTER
12.1 KHAÙI NIEÄM
Ví duï 13.1: Chöông trình ñoåi trò
void Swap (int doi_1, int doi_2)
{ int temp = doi_1;
doi_1 = doi_2 ;
doi_2 = temp ;
}
Tröôùc khi goïi haøm, trò cuûa bieán a = 3, b = 4.
Sau khi goïi haøm, trò cuûa bieán a = 3, b = 4.
CHÖÔNG 12
POINTER
12.1 KHAÙI NIEÄM
Hình aûnh stack
thöïc thi khi ñieàu
khieån ñeán cuoái
chöông trình
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Trong ngoân ngöõ C coù moät toaùn töû laáy ñòa chæ cuûa moät bieán
ñang laøm vieäc, toaùn töû naøy laø moät daáu & (ampersand), taïm
goïi laø toaùn töû laáy ñòa chæ. Cuù phaùp nhö sau:
& bieán
vôùi bieán laø moät beán huoc keåbakyønhöng khoâng ñöôïc
laø bieán thanh ghi.
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Ví duï: Neáu coù moät bieán ñaõ ñöôïc khai baùo laø
int heä_soá_a;
thì
& heä_soá_a
seõ laø ñòa chæ cuûa bieán heä_soá_a.
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Cuù phaùp ñeå khai baùo bieán pointer:
kieåu * teân_bieán_pointer
vôùi - kieåu coù theå laø kieåu baát kyø, xaùc ñònh kieåu döõ lieäu coù
theå ñöôïc ghi vaøo ñoái töôïng maø con troû ñang troû ñeán.
- teân_bieán_pointer aø en cûa ben con troû, moät danh
hieäu hôïp leä.
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Bieán hoaëc ñoái töôïng maø con troû ñang troû ñeán coù theå ñöôïc
truy xuaát qua teân cuûa bieán con troû vaø daáu "*" ñi ngay tröôùc
bieán con troû, cuù phaùp cuï theå nhö sau:
* teân_bieán_con_troû
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Ví duï: Xeùt ví duï sau:
int object;
int *pint;
object = 5;
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Ví duï:
AND R0, R0, #0 ; xoùa R0
ADD R0, R0, #5 ; R0 = 5
STR R0, R5, #0 ; object = 5
ADD R0, R5, #0 ñòa chæ cuûa bieán
object
STR R0, R5, #-1 ; R5 – 1: ñòa chæ cuûa bieán pint, pint <- R0
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Ví duï: Xeùt caùc khai baùo sau:
int a, b;
int *pa;
Sau khi khai baùo, ta coù ba oâ nhôù cho ba bieán a, b vaø pa
nhö sau:
CHÖÔNG 12
POINTER
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.1 Khai baùo bieán pointer - pointer haèng
Ví duï:
void * pvoid;
int a, * pint;
double b, * pdouble;
pvoid = (void *) &a;
pint = (int *) pvoid;
(*pint) ++;
pvoid = (void *) &b;
pdouble = (double *) pvoid;
(*pdouble) -- ;
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.2 Caùc pheùp toaùn treân pointer
Coù theå coäng, tröø moät pointer vôùi moät soá nguyeân (int,
long,...). Keát quaû laø moät pointer.
Ví duï :
int *pi1, *pi2, n;
pi1 = &n;
pi2 = pi1 + 3;
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.2 Caùc pheùp toaùn treân pointer
Ví duï: Cho khai baùo
int a[20];
int *p;
p = &a[0];
p += 3;
/* p löu ñòa chæ phaàn töû a[0 + 3], töùc &a[3] */
CHÖÔNG 12
POINTER
12.2 THAO TAÙC TREÂN POINTER
12.2.2 Caùc pheùp toaùn treân pointer
Khoâng theå thöïc hieän caùc pheùp toaùn nhaân, chia, hoaëc laáy
dö moät pointer vôùi moät soá, vì pointer löu ñòa chæ, neân neáu
thöïc hieän ñöôïc ñieàu naøy cuõng khoâng coù moät yù nghóa naøo
caû.
Pheùp tröø giöõa hai ponter vaãn amopheùp toaùn hôïp leä,
keát quaû laø moät trò thuoäc kieåu int bieåu thò khoaûng caùch (soá
phaàn töû) giöõa hai pointer ñoù.
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 12: Pointer", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_12_pointer.pdf