1 / 17

Pointers

Pointers. Why have pointers?. pointers ทำให้ฟังก์ชันหรือส่วนของโปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ซับซ้อนได้ เช่น linked list หรือ binary tree. What is a pointer?.

ekram
Download Presentation

Pointers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pointers

  2. Why have pointers? • pointers ทำให้ฟังก์ชันหรือส่วนของโปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ • ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ซับซ้อนได้ เช่น linked list หรือ binary tree

  3. What is a pointer? • ชนิดข้อมูลประเภท int เปรียบเสมือนกับกล่องที่เก็บค่า “เลขจำนวนเต็ม” 1 ค่า เช่น int num = 42; num 42 จะจองเนื้อที่ในหน่วยความจำไว้สำหรับเก็บข้อมูลจำนวนเต็ม 1 ค่า โดยสามารถอ้างถึงตำแหน่งที่เก็บนี้ด้วยชื่อ num

  4. What is a pointer? • pointer มีความแตกต่างเล็กน้อย ... • pointer จะไม่ได้เก็บค่าข้อมูลโดยตรง แต่จะเก็บตำแหน่ง (reference)ของตัวแปรที่เก็บข้อมูลนั้นแทน • เราอาจเรียกตัวแปรที่ถูก pointerเก็บตำแหน่งไว้ว่า “Pointee” num 42 1001 ptr 1001

  5. What is a pointer? Pointee num num 42 42 อาจวาดได้อีกอย่าง 1001 ptr ptr 1001 ตัวแปร Pointer

  6. Pointer assignment num 42 เราสามารถกำหนดให้ pointer ชี้ไปยังตำแหน่งเดียวกันได้ โดยใช้เครื่องหมาย assignment (เครื่องหมายเท่ากับ =) เช่น ptr2 = ptr; ptr ptr2

  7. Sharing Sharing อ้างถึงเนื้อที่ในหน่วยความจำเดียวกัน (ประยุกต์ใช้ตอนส่งค่าระหว่างฟังก์ชันหรือโปรแกรมได้) ptr 42 ptr2

  8. Syntax int * point to int float * point to float char * point to char • int *ptr; กำหนดให้ ptr เป็น pointer ที่ชี้ไปยังตัวแปรประเภท integer

  9. The star * • ตาม syntax อนุญาตให้เครื่องหมาย asterisk หรือ star ถูกวางไว้ที่ตำแหน่งใดก็ได้ระหว่างชนิดของตัวแปร(base type)และชื่อตัวแปร(variable name) int *ptr; int * ptr; int* ptr; เหมือนกัน

  10. & operator ใช้ & วางไว้หน้าชื่อตัวแปร จะหมายถึงตำแหน่งของตัวแปรนั้น int num; int * numPtr; num 42 numPtr num = 42; numPtr = #

  11. * operator • * operator เมื่อวางไว้หน้าตัวแปร pointer แล้วจะหมายถึง ข้อมูลในตำแหน่งที่ pointer นั้นชี้อยู่ (ข้อมูลใน pointee) • สมมติให้มีการประกาศตัวแปรดังนี้ int num, *numPtr; num 42 numPtr num = 42; 50 numPtr = # ผลลัพธ์ *numPtr = 50; • 50 printf(“%d %d”, *numPtr, num);

  12. Example int A, B, C, *P, *Q; A = 1; B = 2; C = 3; A 1 P B 2 13 P = &A; Q Q = &B; 1 3 C C = *P; P = Q; *P = 13;

  13. พิจารณาตัวอย่าง pointer1.cpp

  14. int a,b,c, *p, *q; a = 1; b = 2; c = 3; p = &a; printf("p = %p\n",p); printf("*p = %d\n",*p); q = &b; printf("q = %p\n",q); printf("*q = %d\n",*q); c = *p; printf("c = %d\n",c); p = q; printf("*p = %d\n",*p); printf("*q = %d\n",*q); printf("p = %p\n",p); printf("q = %p\n",q); *p = 13; printf("*p = %d\n",*p); printf("*q = %d\n",*q); pointer1.cpp

  15. Bad Pointer Example เช่น int * p; *p = 42; จะเห็นว่า pointer p ยังไม่ถูก assign ให้ชี้ไปที่ตำแหน่งใด แต่มีการกำหนดค่า *p = 42; ซึ่งไม่ถูกต้อง

  16. Pointer Type Effects int *p; p = p + 12; จากตัวอย่างข้างบน p = p+12 ไม่ได้เป็นการบวก 12 กับค่าที่อยู่ใน p แต่... p = p+12 จะเพิ่มค่า p ขึ้นเท่ากับขนาดของ integer 12 ตัว (มาจากการประกาศให้ p เป็น pointer ที่ชี้ไปยัง int ) ดังนั้น ถ้า integer 1 ตัว = 2 bytes จะได้ว่า p = p+12 จะหมายถึงเพิ่มค่า p ขึ้นอีก 24

  17. Pointer Type Effects int *p; p = p + 2; ถ้า int มีขนาด 2 bytes ดังนั้น เพิ่มค่าใน p ขึ้นอีก 4 char *c; c = c + 2; ถ้า char มีขนาด 1 byte ดังนั้น เพิ่มค่าใน c ขึ้นอีก 2 float *f; f = f + 2; ถ้า float มีขนาด 4 bytes ดังนั้น เพิ่มค่าใน f ขึ้นอีก 8

More Related