2011/10/02

C++ - Pointer to Array

สวัสดีรอบสองของวันนี้ครับ
คราวนี้ผมจะมาเขียนเรื่องการใช้ Pointer เป็น Array

ปกติในภาษา C เวลาจะประกาศตัวแปรแบบ array เราจะประกาศเป็น

int a[5];


คือการประกาศตัวแปร a เป็น array ของ int มีสมาชิก 5 ตัว (0 - 4)

และเวลาที่เราจะประกาศ Pointer เราจะเขียนเป็น

int *b;

คือให้ b เป็น pointer ของ int
ในภาษา C ถ้าเราต้องการให้ pointer เป็น array เราจะต้องจองหน่วยความจำให้มันโดยใช้ฟังก์ชัน calloc


void* calloc(size_t num, size_t size);


ถ้าจะให้ b เป็น array ที่มีสมาชิก 5 ตัวเราจะเขียนว่า

b = (int*)calloc(5, sizeof(int));

และจะใช้


void free(void*);

ในการลบข้อมูลที่จองออก

free(b)

ในภาษา C++ เราสามารถเขียนอีกแบบหนึ่งได้

เวลาจะประกาศตัวแปร int แต่ต้องการให้เป็น pointer เราจะใช้คำสั่ง new ในการจองหน่วยความจำ

int *c = new int;

และเราจะใช้ คำสั่ง delete ลบค่าออก

delete c;

แต่ถ้าต้องการให้ตัวแปรเป็นแบบ array เราจะใส่จำนวนสมาชิกลงไปด้วย

int *d = new int[5];

คือการประกาศให้ d เป็น array ที่มีสมาชิก 5 ตัว
เห็นไหมครับว่าง่ายกว่าภาษา C เยอะเลย

เวลาจะลบข้อมูลเราก็จะใช้

delete [] d;


แล้ว array สองมิติ จะสร้างยังไงดี ?

int **e = new int*[5];
for (int i = 0; i < 5; i++)
e[i] = new int[3];

คือการประกาศให้ e เป็น array ขนาด 5x3
จากตัวอย่างเราจะสังเกตได้ว่า เราไม่จำเป็นที่จะต้องประกาศ array เป็นสี่เหลี่ยมเสมอไป
เราอาจจะประกาศเป็นรูปอะไรก็ได้

int **f = new int*[3];
f[0] = new int[2];
f[1] = new int[3];
f[2] = new int;

No comments:

Post a Comment