Just another WordPress.com site

Array ใน C++

โครงสร้าง array เป็นโครงสร้างที่จะนำเอาข้อมูลชนิดเดียวกันมารวมไว้ด้วยกัน โดยเอาข้อมูลมาเรียงต่อกันเหมือนกันกับขบวนรถไฟ

เราสามารถประกาศ array ใน C++ ได้ดังนี้

ชนิดข้อมูล  ชื่อ array[ความยาวของ array];

ถ้า array เรามีชื่อว่า a และมีความยาวเป็น n  แล้ว index ที่ใช้อ้างอิงถึงค่าใน array จะเป็น 0,1,2,…, n-1 โดยมี a เป็น pointer ซึ่งชี้ไปยังตำแหน่งแรกของ array คือ a[0] ดังรูป

ในการนิยามค่าสมาชิกใน array เราจะใช้การเขียนแบบนี้

ชื่อ array[index]=ค่าอะไรซักอย่าง;

ลองมาดูตัวอย่างกันครับ สมมติว่าเราต้องการนิยาม array ที่ชื่อว่า a มีความยาวเป็น 3 โดยเก็บข้อมูลชนิด int 3 ตัวคือ 6, 5 และ 8 ตามลำดับเราจะเขียนคำสั่งดังนี้

เพื่อจะเขียนได้ง่ายยิ่งขึ้น ใน C++ เอง มีคำสั่งการเขียนข้อความนี้อีกแบบนึงด้วยนะครับ คือเราอาจจะเขียนแบบในรูปนี้ก็ได้ครับ

ที่นี้เราลองมาเขียนการทดสอบอะไรเล่นๆ เกี่ยวกับ array ที่เราสร้างขึ้นกันครับ

เมื่อลองรันดูจะได้ผลลัพธ์ว่า

สังเกตนะครับว่า ตัวเลข 6, 5, 8 นั้น ถูกเก็บไว้ใน address a, a+1, a+2 ซึ่งเป็น address ที่เรียงชิดติดกันติดกัน ในการอ้างอิงถึงสมาชิกที่อยู่ใน array โดยทั่วๆไปจะนิยมเขียนแบบ a[index] มากกว่าแบบ *(a+index) นะครับ เพราะมันอ่านง่ายกว่ากันเยอะเลย

ในภาษา C++ นั้นถ้าเราไม่ได้กำหนดค่าเริ่มต้นให้กับ array หรือกำหนดค่าให้ไม่ครบ มันจะเซ็ตค่าที่เรายังไม่กำหนดเป็นค่าตั้งต้นของ C++ ทั้งหมด ถ้าเป็นข้อมูลชนิดตัวเลขมันจะเซตค่าเป็น 0 ถ้าเป็ยข้อมูลประเภท char มันจะเซตค่าเป็นช่องว่าง(white space) เช่น

ในโปรแกรมนี้เราเซตค่า a[0] กับ a[1] เท่านั้น เมื่อนำมารันเราจะผลลัพธ์เป็น

ตัวอย่างต่อไปสมมติว่าเราไม่ได้กำหนดค่าใดๆให้กับมันเลย

เมื่อนำมารันจะได้ผลลัพธ์เป็น

โดยทั่วไปเวลาที่จะต้องการเซตให้สมาชิกแต่ละตัวมีค่าเป็น 0 มักจะนิยมเขียนเป็น

int a[4]={0}

มากกว่าการเขียน int a[4] เฉยๆนะครับ เพราะมันจะทำให้อ่านตัวโค้ดง่ายกว่า ดังรูปนี้ครับ

pointer ของ array จะมีความแต่ต่างจาก pointer ของข้อมูลชนิดอื่นๆ ตรงที่ว่า pointer array ไม่สามารถเปลี่ยนตำแหน่งที่ชี้ได้ เดี๋ยวเราลองมาดูตัวอย่างกันครับ

ตัวอย่างแรกผมจะลองสร้าง pointer ธรรมดา ให้ชี้ไปที่ array ดู ดังนี้

เราจะได้ผลลัพธ์ของการรันเป็นดังนี้ครับ

แต่ถ้าเราให้ pointer array ชี้ยัง pointer array แบบนี้

เมื่อนำมา compile มันจะไม่ยอมเปลี่ยนตัวชี้ b ไปยัง a โดยขึ้นข้อความว่า

สมมติว่าเราต้องการให้ค่าใน array b เท่ากับค่าใน array a เราจะต้องวนลูป for เพื่อกำหนดค่าของ b ดังนี้ครับ

เมื่อลองรันดูจะได้ค่า b ดังนี้ครับ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: