13

งานทำ Blog บทที่ 9

  • Upload
    -

  • View
    198

  • 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 เปนขนาดของหนวยความจ าทตองการจองแตละตว

มหนวยเปนไบต

ทมา : คมออบรมครวทยาศาสตร คณตศาสตร คอมพวเตอร โลก ดาราศาสตร และอวกาศ ระดบมธยมศกษาตอนปลาย

หนงสอเรยนรายวชาเพมเตม การเขยนโปรแกรมเบองตนดวยภาษา C บรษทซคเซสมเดย

คมอเรยนเขยนโปรแกรมภาษา ส านกพมพ IDC PREMIER