งานทำ blog บทที่ 9 (2)
TRANSCRIPT
![Page 1: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/1.jpg)
![Page 2: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/2.jpg)
ตวแปรพอยนเตอร (Pointer) เปนตวแปรพเศษในภาษา C มหนาท
เกบต าแหนงทอย (Address) ของตวแปรอน ๆ ทอยในหนวยความจ า ซง
ตางจากตวแปรทวไปทท าหนาทเกบขอมล โดยมรปแบบการประกาศใช
งานดงน
type *name;
โดยท type เปนชนดของตวแปรพอยนเตอร โดยพจารณาวาจะประกาศ
ตวแปรพอยนเตอรเพอใชเกบทอยของตวแปรชนดใด
* เปนเครองหมายทก าหนดใหตวแปรทประกาศเปนพอยนเตอร
![Page 3: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/3.jpg)
1. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด int เทานน
2. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด char เทานน
3. ประกาศตวแปรพอยนเตอรส าหรบเกบต าแหนงทอยของตว
แปรชนด float เทานน
ตวอยางการประกาศตวแปรพอยนเตอร
int *pt_intCount;
char *pt_chName;
float *pt_fPrice;
1
2
3
![Page 4: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/4.jpg)
การใชงานตวแปรพอยนเตอร
ตวแปรพอยนเตอรจะมรปแบบการใชงานทแตกตางไปจากตว
แปรทวไป เนองจากพอยนเตอรมหนาทเกบต าแหนงทอยของตวแปร ซง
สามารถใชงานไดทงต าแหนงทอยทพอยนเตอรเกบไว และสามารถใช
งานขอมลทต าแหนงทอยนนบนทกไดดวย โดยสามารถใชงานไดดงน
• การใชงานเครองหมาย & เพออางองถงต าแหนงทอยของตวแปร
• การใชเครองหมาย * เพออางองถงขอมลทต าแหนงทอยของตวแปร
บนทกไว
![Page 5: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/5.jpg)
การด าเนนการกบพอยนเตอร
การด าเนนการกบพอยนเตอร เปนการใชงานตวด าเนนการ
ทางคณตศาสตรกบพอยนเตอร โดยใชตวด าเนนการ +, -, ++ และ --
ซงผลท ไดจะเปนการเลอนต าแหนงทอยของตวแปรตาม
ความหมายของตวด าเนนการ
คอ ก าหนดใหพอยนเตอรชไปยงต าแหนงทอยทสงขน หรอ
ก าหนดใหพอยนเตอรชไปยงต าแหนงทอยทต าลงนนเอง
![Page 6: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/6.jpg)
ความสามารถอกอยางหนงของพอยนเตอรกคอ การใช
พอยนเตอรอางถงต าแหนงทอยของตวแปรอารเรย ซง
รวมไปถงสตรงซงเปนตวแปรอารเรยของอกขระดวย
พอยนเตอรทใชอางองต าแหนงทอยของตวแปรอารเรย
โดยปกตจะเปนการอางถงต าแหนงทอยของตวแปร
อารเรยต าแหนงแรกเทานน (อนเดกซเปน 0) เนองจาก
ต าแหนงอน ๆ จะตอจากต าแหนงแรกของตวแปรอารเรย
นนเอง
การใชงานพอยนเตอรกบอารเรย
![Page 7: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/7.jpg)
การจดการพนทหนวยความจ าแบบไดนามค
(Dynamic Memory Allocation)
การ จดการพ นท หน วยความจ าแบบไดนามค
(Dynamic Memory Allocation) คอ การจดการพนท
หนวยความจ าโดยผเขยนโปรแกรมนนเอง เพราะใน
บางครงการทคอมพวเตอรจดการหนวยความจ านน
อาจเกดปญหาในกรณการจองพนทหนวยความจ า
แบบคงท แลวคอมพว เตอร ไมสามารถจดสรร
หนวยความจ าใหได ท าใหการท างานของโปรแกรม
อาจเกดความผดพลาดขนได
![Page 8: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/8.jpg)
การจดการพนทหนวยความจ าแบบไดนามค
(Dynamic Memory Allocation)
1. ฟงกชนส าหรบการจองพนทหนวยความจ า
2. ฟงกชนส าหรบคนคาหนวยความจ า
3. ฟงกชนส าหรบเปลยนแปลงพนทหนวยความจ า
การจดการหนวยความจ าแบบไดนามคน สามารถท าไดโดย
เรยกใชงานฟงกชนตาง ๆ ซงอยภายใตไลบาร stdlib.h ดงน
![Page 9: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/9.jpg)
1. ฟงกชนส าหรบการจองพนทหนวยความจ า
ไดแก ฟงกชน malloc และฟงกชน calloc ซงมรปแบบการใชงานดงน
void *malloc(size_t num_bytes);
โดยท size_t num_bytes เปนขนาดของหนวยความจ าทตองการจองม
หนวยเปนไบต (Byte)
กรณทจองหนวยความจ าไดส าเรจ ฟงกชน malloc จะคนคากลบมาใน
ลกษณะเปนตวเลขไมสามารถเดาได และกรณทจองหนวยความจ าไมส าเรจ
ฟงกชน malloc จะคนคา NULL กลบมา
![Page 10: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/10.jpg)
void *calloc(size_t num_elements, size_t element_size);
โดยท size_t num_elements เปนจ านวนทตองการจองในหนวยความจ า
size_t element_size เปนขนาดของหนวยความจ าทตองการจอง
แตละตวมหนวยเปนไบต
กรณทจองหนวยความจ าไดส าเรจ ฟงกชน calloc จะคนคากลบมาใน
ลกษณะเปน 0 และกรณทจองหนวยความจ าไมส าเรจ ฟงกชน calloc จะ
คนคา NULL กลบมา
![Page 11: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/11.jpg)
2. ฟงกชนส าหรบคนคาหนวยความจ า
ไดแก ฟงกชน free ซงมรปแบบการใชงานดงน
void free(void *prt);
โดยท void *prt เปนตวแปรพอยนเตอรทชไปยงคาต าแหนงทอยใน
หนวยความจ า ซงเปนผลมาจากฟงกชน calloc และ malloc
![Page 12: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/12.jpg)
3. ฟงกชนส าหรบเปลยนแปลงพนทหนวยความจ า
ไดแก ฟงกชน realloc ซงมรปแบบการใชงานดงน
void *realloc(void *stge_ptr, size_t element_size);
โดยท
void *stge_ptr เปนตวแปรพอยนเตอรทชไปยงคาต าแหนงทอยใน
หนวยความจ าซงเปนผลมาจากฟงกชน calloc และ
malloc
size_t element_size เปนขนาดของหนวยความจ าทตองการจองแตละตว
มหนวยเปนไบต
![Page 13: งานทำ Blog บทที่ 9 (2)](https://reader034.vdocuments.net/reader034/viewer/2022042717/55d1a9b9bb61ebda688b4689/html5/thumbnails/13.jpg)
ทมา : คมออบรมครวทยาศาสตร คณตศาสตร คอมพวเตอร โลก ดาราศาสตร และอวกาศ ระดบมธยมศกษาตอนปลาย
หนงสอเรยนรายวชาเพมเตม การเขยนโปรแกรมเบองตนดวยภาษา C บรษทซคเซสมเดย
คมอเรยนเขยนโปรแกรมภาษา ส านกพมพ IDC PREMIER