วันศุกร์ที่ 2 เมษายน พ.ศ. 2553

Pointer คืออะไร

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 = &reg1;   //ตัวแปร register จะใช้ใน CPU โดยตรง

*ตัวแปรชนิด register ไม่ต้องมี addressที่หน่วยความจำสำหรับเก็บค่า

ไม่มีความคิดเห็น:

แสดงความคิดเห็น