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

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

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

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


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

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

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

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

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

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

6 การแสดงตำแหน่งข้อมูลที่พอยท์เตอร์ชี้ ( ต่อ ) 1.int counter = 100; 2.int *pt_counter; 3.char sex = ‘M’; 4.char *pt_sex; 5.float gpa = 3.21; 6.float *pt_gpa; 1.int counter = 100; 2.int *pt_counter; 3.char sex = ‘M’; 4.char *pt_sex; 5.float gpa = 3.21; 6.float *pt_gpa; 6 ตัวแปร ตำแหน่งบน หน่วยความ จำ ค่าของ ข้อมูล ตัวแปร พอยท์ เตอร์ counter pt_counter sex1003‘M’pt_sex gpa pt_gpa

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

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

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

10 การแสดงค่าของข้อมูลที่ตัวแปรพอยท์ เตอร์ชี้  รูปแบบการใช้งาน  ตัวอย่าง 1.int x = 17, y; 2.int *pt_int; 3.pt_int = &x; 4.y = *pt_num 10 * ตัวแปร พอยท์เตอร์ x pt_int 0370 y 0876 _______

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

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

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

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

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

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

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();  } 17

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

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

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

21


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

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


Ads by Google