ปฏิบัติการครั้งที่ 10 pointer
หน่วยความจำ หน่วยความจำนั้นเสมือนเป็นช่องว่างไว้เก็บ ของที่มีหมายเลขประจำติดไว้ที่แต่ละช่อง เพื่อใช้ในการระบุตำแหน่งของช่องได้ แต่ละช่องจะเก็บข้อมูลได้ 1 ไบต์ A001A002A003A004 B001B002B003B004
แอดเดรสกับหน่วยความจำ หมายเลขประจำแต่ละช่องของหน่วยความจำ เราเรียกว่าตำแหน่งของหน่วยความจำ หรือ แอดเดรส (Address) การเก็บค่าในหน่วยความจำ จึงต้องระบุด้วย ว่าต้องการเก็บค่าไว้ที่แอดเดรสใด ในการเขียนโปรแกรมและต้องการเก็บค่าไว้ ในหน่วยความจำ เราจะใช้การอ้างถึง หน่วยความจำโดยผ่านชื่อตัวแปรแทนการ อ้างหมายเลขแอดเดรสโดยตรง
การประกาศตัวแปร เมื่อมีการประกาศตัวแปรจะมีการจอง หน่วยความจำไว้ให้ ดังนั้นเราจึงจะอ้างถึง หน่วยความจำที่เราจองไว้เก็บข้อมูลผ่านด้วย ชื่อตัวแปร int x; FF01 FF02 FF03 FF04 ชนิดข้อมูล int มีการจองพื้นที่ 2 ไบต์
การขอดูแอดเดรสของตัวแปร แต่ถ้าเราอยากทราบว่าตัวแปรได้จอง หน่วยความจำที่เท่าใด สามารถทำได้ โดยใช้ ตัวดำเนินการ & void main(){ int x = 3; printf(“value is %d\n”,x); printf(“address is %x\n”,&x); } void main(){ int x = 3; printf(“value is %d\n”,x); printf(“address is %x\n”,&x); }
พอยน์เตอร์ (pointer) คือชนิดข้อมูลหนึ่งที่เก็บค่าแอดเดรสของตัว แปรอื่น ดังนั้นพอยน์เตอร์ไม่ว่าจะชี้ไปที่ตัวแปรใดก็จะ ใช้พื้นที่ในการเก็บเท่ากันเพราะสิ่งที่พอยน์ เตอร์เก็บคือค่าแอดเดรสของตัวแปรอื่น int x; int *p = &x; int x; int *p = &x; FF01 FF02 FF03 FF04 x p FF01
การกำหนดให้ตัวแปรเป็นชนิด พอยน์เตอร์ รูปแบบการกำหนดให้ตัวแปรเป็นชนิดพอยน์ เตอร์จะต้องระบุด้วยว่าสามารถชี้ไปหาตัวแปร ประเภทใด ชนิดข้อมูลที่อ้างถึง * ชื่อตัวชี้ ; int *a ; // กำหนดให้ a เป็นตัวชี้ชนิดข้อมูล int char *x,b ;// กำหนดให้ x เป็นตัวชี้ชนิดข้อมูล char // แต่ b เป็นตัวแปรชนิด char
การใช้เครื่องหมาย & int x = 17; int *pt_int; pt_int = &x; float salary = ; float *pt_float; pt_float = &salary; char letter = ‘w’; char *pt_char; pt_char = &letter; pt_intx pt_floatsalary pt_charletter 0260‘w’
ตัวอย่างโปรแกรมที่ใช้ เครื่องหมาย & #include int x = 17; float salary = ; char letter = ‘w’; int *pt_int; float *pt_float; char *pt_char; main() { clrscr(); pt_int = &x; pt_float = &salary; pt_char = &letter; printf(“Address of variable x = %p\n”,pt_int); printf(“Address of variable salary = %p\n”,pt_float); printf(“Address of variable letter = %p\n”,pt_char); } Address of variable x = 00AA Address of variable salary = 00AC Address of variable letter = 00BC
ตัวอย่างโปรแกรมที่ใช้ เครื่องหมาย & #include int x = 17; float salary = ; char letter = ‘w’; int *pt_int; float *pt_float; char *pt_char; main() { clrscr(); pt_int = &x; pt_float = &salary; pt_char = &letter; printf(“Address of variable x = %p\n”,pt_int); printf(“Address of variable salary = %p\n”,pt_float); printf(“Address of variable letter = %p\n”,pt_char); } Address of variable x = 00AA Address of variable salary = 00AC Address of variable letter = 00BC
เครื่องหมาย * (Indirect Operator) เครื่องหมาย * ใช้เพื่อหาค่าข้อมูลจาก แอดเดรสที่ตัวแปรพอยเตอร์ชี้อยู่ ดังนั้น การใช้เครื่องหมาย * หน้าตัวแปร พอยน์เตอร์ย่อมหมายถึงค่าข้อมูลของตัวแปร ที่พอยน์เตอร์ชี้นั่นเอง
ความหมายของ indirect Operator เมื่อมีการเรียกใช้ * ชื่อตัวแปรพอยน์เตอร์ จะ เข้าไปดูที่ตัวแปรพอยน์เตอร์ว่าเก็บค่า ตำแหน่งใด แล้วจึงเข้าไปดึงค่าที่เก็บใน ตำแหน่งนั้นออกมาดำเนินการ 0A30 5 num A30 p_num int num = 5; int *p_num; p_num = # printf(“%d”,*p_num); *p_num