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 chöông trình  
ñang ôû doøng doi_1  
= doi_2 ;  
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 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 kbakyø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 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  
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 đủ
pdf 109 trang yennguyen 12/04/2022 7000
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:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_12_pointer.pdf