Upload
-
View
197
Download
1
Embed Size (px)
Citation preview
ตวแปรพอยนเตอร (Pointer) เปนตวแปรพเศษในภาษา C มหนาท
เกบต าแหนงทอย (Address) ของตวแปรอน ๆ ทอยในหนวยความจ า ซง
ตางจากตวแปรทวไปทท าหนาทเกบขอมล โดยมรปแบบการประกาศใช
งานดงน
type *name;
โดยท type เปนชนดของตวแปรพอยนเตอร โดยพจารณาวาจะประกาศ
ตวแปรพอยนเตอรเพอใชเกบทอยของตวแปรชนดใด
* เปนเครองหมายทก าหนดใหตวแปรทประกาศเปนพอยนเตอร
1. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด int เทานน
2. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด char เทานน
3. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด float เทานน
ตวอยางการประกาศตวแปรพอยนเตอร
int *pt_intCount;
char *pt_chName;
float *pt_fPrice;
1
2
3
การใชงานตวแปรพอยนเตอร
ตวแปรพอยนเตอรจะมรปแบบการใชงานทแตกตางไปจากตว
แปรทวไป เนองจากพอยนเตอรมหนาทเกบต าแหนงทอยของตวแปร ซง
สามารถใชงานไดทงต าแหนงทอยทพอยนเตอรเกบไว และสามารถใช
งานขอมลทต าแหนงทอยนนบนทกไดดวย โดยสามารถใชงานไดดงน
• การใชงานเครองหมาย & เพออางองถงต าแหนงทอยของตวแปร
• การใชเครองหมาย * เพออางองถงขอมลทต าแหนงทอยของตวแปร
บนทกไว
การด าเนนการกบพอยนเตอร
การด าเนนการกบพอยนเตอร เปนการใชงานตวด าเนนการ
ทางคณตศาสตรกบพอยนเตอร โดยใชตวด าเนนการ +, -, ++ และ --
ซงผลท ไดจะเปนการเลอนต าแหนงทอยของตวแปรตาม
ความหมายของตวด าเนนการ
คอ ก าหนดใหพอยนเตอรชไปยงต าแหนงทอยทสงขน หรอ
ก าหนดใหพอยนเตอรชไปยงต าแหนงทอยทต าลงนนเอง
ความสามารถอกอยางหนงของพอยนเตอรกคอ การใช
พอยนเตอรอางถงต าแหนงทอยของตวแปรอารเรย ซง
รวมไปถงสตรงซงเปนตวแปรอารเรยของอกขระดวย
พอยนเตอรทใชอางองต าแหนงทอยของตวแปรอารเรย
โดยปกตจะเปนการอางถงต าแหนงทอยของตวแปร
อารเรยต าแหนงแรกเทานน (อนเดกซเปน 0) เนองจาก
ต าแหนงอน ๆ จะตอจากต าแหนงแรกของตวแปรอารเรย
นนเอง
การใชงานพอยนเตอรกบอารเรย
การจดการพนทหนวยความจ าแบบไดนามค
(Dynamic Memory Allocation)
การ จดการพ นท หน วยความจ าแบบไดนามค
(Dynamic Memory Allocation) คอ การจดการพนท
หนวยความจ าโดยผเขยนโปรแกรมนนเอง เพราะใน
บางครงการทคอมพวเตอรจดการหนวยความจ านน
อาจเกดปญหาในกรณการจองพนทหนวยความจ า
แบบคงท แลวคอมพว เตอร ไมสามารถจดสรร
หนวยความจ าใหได ท าใหการท างานของโปรแกรม
อาจเกดความผดพลาดขนได
การจดการพนทหนวยความจ าแบบไดนามค
(Dynamic Memory Allocation)
1. ฟงกชนส าหรบการจองพนทหนวยความจ า
2. ฟงกชนส าหรบคนคาหนวยความจ า
3. ฟงกชนส าหรบเปลยนแปลงพนทหนวยความจ า
การจดการหนวยความจ าแบบไดนามคน สามารถท าไดโดย
เรยกใชงานฟงกชนตาง ๆ ซงอยภายใตไลบาร stdlib.h ดงน
1. ฟงกชนส าหรบการจองพนทหนวยความจ า
ไดแก ฟงกชน malloc และฟงกชน calloc ซงมรปแบบการใชงานดงน
void *malloc(size_t num_bytes);
โดยท size_t num_bytes เปนขนาดของหนวยความจ าทตองการจองม
หนวยเปนไบต (Byte)
กรณทจองหนวยความจ าไดส าเรจ ฟงกชน malloc จะคนคากลบมาใน
ลกษณะเปนตวเลขไมสามารถเดาได และกรณทจองหนวยความจ าไมส าเรจ
ฟงกชน malloc จะคนคา NULL กลบมา
void *calloc(size_t num_elements, size_t element_size);
โดยท size_t num_elements เปนจ านวนทตองการจองในหนวยความจ า
size_t element_size เปนขนาดของหนวยความจ าทตองการจอง
แตละตวมหนวยเปนไบต
กรณทจองหนวยความจ าไดส าเรจ ฟงกชน calloc จะคนคากลบมาใน
ลกษณะเปน 0 และกรณทจองหนวยความจ าไมส าเรจ ฟงกชน calloc จะ
คนคา NULL กลบมา
2. ฟงกชนส าหรบคนคาหนวยความจ า
ไดแก ฟงกชน free ซงมรปแบบการใชงานดงน
void free(void *prt);
โดยท void *prt เปนตวแปรพอยนเตอรทชไปยงคาต าแหนงทอยใน
หนวยความจ า ซงเปนผลมาจากฟงกชน calloc และ malloc
3. ฟงกชนส าหรบเปลยนแปลงพนทหนวยความจ า
ไดแก ฟงกชน realloc ซงมรปแบบการใชงานดงน
void *realloc(void *stge_ptr, size_t element_size);
โดยท
void *stge_ptr เปนตวแปรพอยนเตอรทชไปยงคาต าแหนงทอยใน
หนวยความจ าซงเปนผลมาจากฟงกชน calloc และ
malloc
size_t element_size เปนขนาดของหนวยความจ าทตองการจองแตละตว
มหนวยเปนไบต