Pointer คือตัวแปรที่ชี้ที่อยู่ในหน่วยความจำของตัวแปรอื่่นๆ เราจะใช้ตัวแปรแบบ Pointer นี้เพื่อการเข้าถึงข้อมูลที่รวดเร็ดและยืดหยุ่นได้ โดยการอ้างอิงถึงถึงที่อยู่ของตัวแปรในหน่วยความจำ
ถ้ายังงงๆอยู่ก็ขออธิบายเป็นภาษาคนละกันนะคับ คือว่า เวลาเราจะรับ-ส่ง ตัวแปรในfunction เราก็มักจะให้มัน return ค่าออกมา แล้วก็มีตัวแปรไปรับค่านั้น แต่ถ้าเรามาใช้ pointer เนี้ย เราก็สามารถไปแก้ที่ address ของมันได้เลย ไม่ต้องมารอรับค่า return อยู่!!
ความสะดวกของมันก็คือ ถ้าในกรณีที่เราต้องการค่าreturnจากfunction เพียงตัวเดียวก็คงจะเหมือนๆกับตัวแปรทั่วไป แต่ถ้าเป็น function ที่มีการ return หลายๆตัวแปรล่ะ ถ้าเราใช้ array แล้ว return ออกมาก็ได้ผลเหมือนกันแหละคับแต่ว่าถ้ามันเป็นคนละชนิดกันละ อิๆๆ
การกำหนดตัวแปร Pointer
การกำหนดตัวแปร Pointer จะคล้ายกับการกำหนดตัวแปรชนิดต่างๆ เพียงแต่ต้องมีเครื่องหมาย *หน้าชื่อตัวแปร ดังนี้
int *pt;
ในที่นี้กำหนดให้ pt เป็นตัวแปร Pointer ซึ่งเก็บ Address ของตัวแปรชนิด Integer
ในเรื่อง Pointer จะมีเครื่องหมายอยู่ 2 ชนิดคือ * และ & โดยเครื่องหมายแต่ละตัวจะมีหน้าที่ดังนี้
- * จะเป็นการอ้างอิงถึงข้อมูลที่อยู่ใน address โดย address นี้จะเก็บอยู่ในตัวแปรแบบ Pointer เช่นในตัวอย่างคือ pt
- & จะให้ค่า address ของตัวแปรที่อยู่หลังเครื่องหมายนี้
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int *pt,a,b;
a=20;
pt=&a;
b=*pt;
cout<<"pt's address = "<<&pt<<endl;
cout<<"assign a = 20"<<endl;
cout<<"address of a = "<<&a<<endl;
cout<<"store address of a to pt,pt = "<<&a<<endl;
cout<<"assing b = data in address of pt(*pt),b = "<<b<<endl;
return 0;
}
***ข้อจำกัดในการใช้ตัวดำเนินการ&
- ห้ามใช้กับตัวคงที่
var_address = &100;
- ห้ามใช้กับนิพจน์ที่มีตัวดำเนินการ + และ /
int var1 = 100;
var_address = &(var1 + 10);
- ห้ามใช้กับตัวแปร register
register reg1;
var_address = ®1; //ตัวแปร register จะใช้ใน CPU โดยตรง
*ตัวแปรชนิด register ไม่ต้องมี addressที่หน่วยความจำสำหรับเก็บค่า
ไม่มีความคิดเห็น:
แสดงความคิดเห็น