1 / 21

ตัวแปรประเภทตัวชี้ (Pointer)

ตัวแปรประเภทตัวชี้ (Pointer). http://www.renvi.src.ku.ac.th. ตัวแปรพอยท์เตอร์กับอาร์เรย์. พอยท์เตอร์ของพอยท์เตอร์. 4. 6. Today Agenda. pointer?. อาร์เรย์ของพอยท์เตอร์. 1. 5. 2. การประกาศตัวแปรพอยท์เตอร์. การแสดงตำแหน่ง, ค่าของข้อมูลของตัวแปรที่พอยท์เตอร์ชี้อยู่. 3. Pointer ?.

bing
Télécharger la présentation

ตัวแปรประเภทตัวชี้ (Pointer)

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. ตัวแปรประเภทตัวชี้ (Pointer) http://www.renvi.src.ku.ac.th

  2. ตัวแปรพอยท์เตอร์กับอาร์เรย์ตัวแปรพอยท์เตอร์กับอาร์เรย์ พอยท์เตอร์ของพอยท์เตอร์ 4 6 Today Agenda pointer? อาร์เรย์ของพอยท์เตอร์ 1 5 2 การประกาศตัวแปรพอยท์เตอร์ การแสดงตำแหน่ง, ค่าของข้อมูลของตัวแปรที่พอยท์เตอร์ชี้อยู่ 3

  3. Pointer ? • เมื่อมีการประกาศตัวแปรใด ๆ ขึ้นในโปรแกรม คอมไพเลอร์ของ C จะจัดการจองพื้นที่ในหน่วยความจำ ณ ตำแหน่งที่ว่างเพื่อเป็นที่เก็บข้อมูลของตัวแปรนั้น • ปกติผู้พัฒนาจะไม่ทราบว่าตำแหน่งที่เก็บข้อมูลนั้นอยู่ ณ ตำแหน่งใด • หากต้องการทราบตำแหน่งของข้อมูลในหน่วยความจำ สามารถทำได้โดยการใช้ ตัวแปรประเภทตัวชี้ (Pointer) ตัวอย่าง: int counter = 100; char sex = ‘M’; float gpa = 3.21;

  4. การประกาศตัวแปรชนิด Pointer • รูปแบบการใช้งาน • ชนิดข้อมูล เป็น ชนิดของข้อมูลพอยท์เตอร์ • ชื่อตัวแปร เป็น ชื่อของตัวแปรพอยท์เตอร์ • เช่น • int *pt_int;  ตัวแปรพอยเตอร์นี้จะชี้ไปยังชนิดข้อมูลที่__________ • char *pt_char ตัวแปรพอยท์เตอร์นี้จะชี้ไปยังชนิดข้อมูลที่________ • float *pt_float  ตัวแปรพอยท์เตอร์นี้จะชี้ไปยังชนิดข้อมูลที่________ ชนิดข้อมูล *ชื่อตัวแปร;

  5. การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ • ประกาศตัวแปรสำหรับเก็บข้อมูฃ • ประกาศตัวแปรพอยท์เตอร์ • ____________________________________

  6. การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ)การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ) • int counter = 100; • int *pt_counter; • char sex = ‘M’; • char *pt_sex; • float gpa = 3.21; • float *pt_gpa;

  7. การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ)การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ) • int counter = 100; • int *pt_counter; • pt_counter = &counter; _____

  8. การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ)การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ) • รูปแบบการใช้งาน • ตัวแปรพอยท์เตอร์ เป็น ตัวแปรชนิดพอยท์เตอร์ที่สร้างไว้ • ชื่อตัวแปรที่ต้องการทราบตำแหน่ง • อย่าลืมว่า “ทั้งตัวแปรพอยท์เตอร์และตัวแปรที่ต้องการทราบตำแหน่งต้องเป็นประเภทข้อมูลชนิดเดียวกัน” • และ เราใช้ %pเป็นรหัสที่ใช้ในการแสดงข้อมูลประเภทพอยท์เตอร์ ตัวแปรพอยท์เตอร์ = &ชื่อตัวแปรที่ต้องการทราบตำแหน่ง;

  9. การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ)การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้(ต่อ) • ตัวอย่างการใช้งาน • int counter = 100; • int*pt_counter; • pt_counter = &counter; • printf(“address of counter is: %p\n”, pt_counter); • char sex = ‘M’; • char *pt_sex; • pt_sex = &sex • printf(“address of sex is: %p\n”, pt_sex); • float gpa = 3.21; • float *pt_gpa; • pt_gpa = &gpa; • printf(“address of gpa is: %p”, pt_gpa);

  10. การแสดงค่าของข้อมูลที่ตัวแปรพอยท์เตอร์ชี้การแสดงค่าของข้อมูลที่ตัวแปรพอยท์เตอร์ชี้ • รูปแบบการใช้งาน • ตัวอย่าง • int x = 17, y; • int *pt_int; • pt_int = &x; • y = *pt_num *ตัวแปรพอยท์เตอร์ ____ ___

  11. การแสดงค่าของข้อมูลที่ตัวแปรพอยท์เตอร์ชี้ (ต่อ) • #include "stdio.h" • #include "conio.h" • main() • { • int a = 2, b = 3; • int *p = &a; • printf("Pointer p is points to a at address: %p\n", p); • printf("Value of a is %d and value of p is %d too\n\n", a, *p); • p = &b; • printf("Now pointer p is point to b at address %p\n", p); • printf("Value of b is %d and now value of p is %d too\n", b, *p); • getch(); • }

  12. ตัวแปรพอยท์เตอร์กับอาร์เรย์ตัวแปรพอยท์เตอร์กับอาร์เรย์ • เราสามารถใช้พอยท์เตอร์ชี้ไปยังข้อมูลในแต่ละช่องของอาร์เรย์ได้ โดยการกำหนดให้พอยท์เตอร์ชี้ไปยังตำแหน่งของช่องที่ต้องการอ้างถึง • วิธีการระบุให้พอยท์เตอร์ชี้ไปยังช่องแรกของอาร์เรย์นั้น ทำได้โดยกำหนดชื่อของอาร์เรย์ให้กับตัวแปรพอยท์เตอร์โดยตรง • ตัวอย่างการใช้งาน • char a[4] = “com”; • char *p; • p = a;หรือ p = &a[0]; ____

  13. ตัวแปรพอยท์เตอร์กับอาร์เรย์(ต่อ)ตัวแปรพอยท์เตอร์กับอาร์เรย์(ต่อ) • สามารถใช้การกระทำการทางคณิตศาสตร์ เช่น +, -, ++, -- เข้ามาจัดการกับการเลื่อนตัวแปรพอยท์เตอร์ในอาร์เรย์ • ดังนั้นการเลื่อนพอยท์เตอร์ไป 1 ก็คือเลื่อนตำแหน่งในหน่วยความจำไปเท่ากับขนาดของชนิดตัวแปรนั้น • intเลื่อนตำแหน่งในหน่วยความจำไป 2 bytes • float เลื่อนตำแหน่งในหน่วยความจำไป 4 bytes • ยกตัวอย่างเช่น • char a[4] = “com”; • char *p; • p = a;หรือ p = &a[0]; • p = p+2; • --p; 101 103 102

  14. ตัวแปรพอยท์เตอร์กับอาร์เรย์(ต่อ)ตัวแปรพอยท์เตอร์กับอาร์เรย์(ต่อ) • main() { • char data[9] = "Computer"; • char *p = data; • printf("First element of data at address %p\n", &data[0]); • printf("and value of first element is: %c\n\n", *p); • ++p; • printf("p point to address %p: value %c\n", p, *p); • --p; • printf("p point to address %p: value %c\n", p, *p); • p = p+5; • printf("p point to address %p: value %c\n", p, *p); • getch(); • }

  15. อาร์เรย์ของพอยท์เตอร์อาร์เรย์ของพอยท์เตอร์ • ก่อนหน้านี้เห็นได้ว่า พอยท์เตอร์ 1 ตัวสามารถอ้างอิงไปยังตัวแปรอื่น ๆ ได้ ณ เวลาใดเวลาหนึ่งเพียงตัวแปรเดียวเท่านั้น • หากเราต้องการให้พอยท์เตอร์สามารถอ้างอิงไปยังตัวแปรหลาย ๆ ตัวพร้อมกันในเวลาเดียวกัน ทำได้โดยการนำตัวแปรพอยท์เตอร์มากำหนดให้อยู่ในรูปแบบของอาร์เรย์ • เช่น int a = 1, b = 2; int *p[2]; p[0] = &a; p[1] = &b; ___ ___

  16. อาร์เรย์ของพอยท์เตอร์(ต่อ)อาร์เรย์ของพอยท์เตอร์(ต่อ) • รูปแบบการใช้งาน • เช่น • int *p[3]; คือการประกาศตัวแปร p เป็นตัวแปรอาร์เรย์ของพอยท์เตอร์ชนิดจำนวนเต็ม ขนาด 3 ช่อง • Char *p[10]; คือการประกาศตัวแปร p เป็นตัวแปรอาร์เรย์ของพอยท์เตอร์ชนิดตัวอักษร ขนาด 10 ช่อง ชนิดของข้อมูล *ชื่อตัวแปรพอยท์เตอร์[ขนาดของอาร์เรย์];

  17. อาร์เรย์ของพอยท์เตอร์(ต่อ)อาร์เรย์ของพอยท์เตอร์(ต่อ) • main(){ • int a[5] = {1, 2, 3, 4, 5}; • int *p_a[5]; • inti; • for(i=0; i<5; i++){ • p_a[i] = &a[i]; • printf("Address of a[%d]: %p\n", i, p_a[i]); • printf("Value of a[%d]: %d\n\n", i, *p_a[i]); • } • getch(); • }

  18. พอยท์เตอร์ของพอยท์เตอร์พอยท์เตอร์ของพอยท์เตอร์ • เป็นตัวแปรพอยท์เตอร์ตัวหนึ่งทึ่ทำหน้าที่ชี้ไปยังตัวแปรพอยท์เตอร์อีกตัวแทนที่จะชี้ไปยังตัวแปรอื่นโดยตรง char a = ‘A’; char *p1; char **p2; p1 = &a; p2 = &p1; char a = ‘A’; char *p1; p1 = &a; ___ ___ ___

  19. พอยท์เตอร์ของพอยท์เตอร์(ต่อ)พอยท์เตอร์ของพอยท์เตอร์(ต่อ) • รูปแบบการใช้งาน • เรียกอีกอย่างว่า indirect pointer • หากต้องการทราบตำแหน่งของพอยท์เตอร์ของพอยท์เตอร์ของพอยท์เตอร์ ก็ต้องใช้ * จำนวน 3 ตัว เป็นเช่นนี้ไปเรื่อย ๆ ชนิดของข้อมูล **ชื่อตัวแปรพอยท์เตอร์;

  20. พอยท์เตอร์ของพอยท์เตอร์(ต่อ)พอยท์เตอร์ของพอยท์เตอร์(ต่อ) • main() { • int a = 10; • int *pt_a; • int **pt_pt_a; • pt_a = &a; • pt_pt_a = &pt_a; • printf("address of a is %p and value of a is %d\n", pt_a, *pt_a); • printf("address of pt_a is %p and value of a is %d", pt_pt_a, **pt_pt_a); • getch(); • }

  21. It’s Time to do your QUIZ :) http://www.renvi.src.ku.ac.th

More Related