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

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

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

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


งานนำเสนอเรื่อง: "ตัวแปรประเภทตัวชี้ (Pointer)"— ใบสำเนางานนำเสนอ:

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

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

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

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

5 การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้
ประกาศตัวแปรสำหรับเก็บข้อมูฃ ประกาศตัวแปรพอยท์เตอร์ ____________________________________ ตัวแปร ตำแหน่งบนหน่วยความจำ ค่าของข้อมูล พอยท์เตอร์ counter 1001 100 pt_counter sex 1003 ‘M’ pt_sex gpa 1004 3.21 pt_gpa

6 การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ (ต่อ)
ตัวแปร ตำแหน่งบนหน่วยความจำ ค่าของข้อมูล พอยท์เตอร์ counter 1001 100 pt_counter sex 1003 ‘M’ pt_sex gpa 1004 3.21 pt_gpa 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; counter 100 1001 pt_counter 1003 _____

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 *ตัวแปรพอยท์เตอร์ x 17 0100 pt_int 0370 y 0876 ____ ___

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]; p 1001 a[0] a[1] a[2] a[3] c o m null 101 102 103 104 ____

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

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; p = p+5; getch(); }

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

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]; int i; 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; p1 300 a A 200 p1 400 p1 300 a A 200 ___ ___ ___

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 :)


ดาวน์โหลด ppt ตัวแปรประเภทตัวชี้ (Pointer)

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


Ads by Google