งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

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

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้"— ใบสำเนางานนำเสนอ:

1 Pointers

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

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

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

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

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

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

8 Syntax int *point to int float *point to float char *point to char / int *ptr; กำหนดให้ ptr เป็น pointer ที่ชี้ไปยังตัว แปรประเภท integer 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; / ตาม syntax อนุญาตให้เครื่องหมาย asterisk หรือ star ถูกวางไว้ที่ตำแหน่งใด ก็ได้ระหว่างชนิดของตัวแปร (base type) และ ชื่อตัวแปร (variable name) int *ptr; เหมือนกัน

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

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

12 Example int A, B, C, *P, *Q; A = 1; B = 2; C = 3; int A, B, C, *P, *Q; A = 1; B = 2; C = 3; P = &A; Q = &B; C = *P; P = Q; *P = 13; 1 2 3 A B C P Q 1 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; เช่น 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 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 int *p; p = p + 2; ถ้า int มีขนาด 2 bytes ดังนั้น เพิ่มค่าใน p ขึ้นอีก 4 char *c; c = c + 2; ถ้า char มีขนาด 1 byte ดังนั้น เพิ่มค่าใน c ขึ้นอีก 2 char *c; c = c + 2; ถ้า char มีขนาด 1 byte ดังนั้น เพิ่มค่าใน c ขึ้นอีก 2 float *f; f = f + 2; ถ้า float มีขนาด 4 bytes ดังนั้น เพิ่มค่าใน f ขึ้นอีก 8 float *f; f = f + 2; ถ้า float มีขนาด 4 bytes ดังนั้น เพิ่มค่าใน f ขึ้นอีก 8


ดาวน์โหลด ppt Pointers. Why have pointers? / pointers ทำให้ฟังก์ชันหรือส่วนของ โปรแกรมสามารถใช้งานข้อมูลร่วมกันได้ / ใช้ pointers ในการสร้างโครงสร้างข้อมูลที่ ซับซ้อนได้

งานนำเสนอที่คล้ายกัน


Ads by Google