
ดังนั้นเรามาเริ่มด้วยความแตกต่างระหว่างอาเรย์หนึ่งมิติและสองมิติพร้อมกับกราฟเปรียบเทียบ
ตารางเปรียบเทียบ:
พื้นฐานสำหรับการเปรียบเทียบ | หนึ่งมิติ | สองมิติ |
---|---|---|
ขั้นพื้นฐาน | เก็บรายการองค์ประกอบเดียวในประเภทข้อมูลที่คล้ายกัน | จัดเก็บ 'รายการของรายการ' หรือ 'อาร์เรย์ของอาร์เรย์' หรือ 'อาร์เรย์ของมิติข้อมูลหนึ่งอาร์เรย์' |
การประกาศ | / * ประกาศใน C ++ พิมพ์ variable_name [size]; * / / * ประกาศใน Java พิมพ์ variable_name []; variable_name = new type [size]; * / | / * ประกาศใน C ++ พิมพ์ variable_name [size1] [size2]; * / / * ประกาศใน Java พิมพ์ variable_name = new int [size1] [size2]; * / |
การประกาศทางเลือก | / * ใน Java int [] a = new int [10]; * / | / * ใน Java int [] [] a = new int [10] [20]; * / |
ขนาดทั้งหมดเป็นไบต์ | จำนวนไบต์ทั้งหมด = sizeof (ชนิดข้อมูลของตัวแปรอาร์เรย์) * ขนาดของอาร์เรย์ | จำนวนไบต์ทั้งหมด = sizeof (ประเภทข้อมูลของตัวแปรอาร์เรย์) * ขนาดของดัชนีแรก * ขนาดของดัชนีที่สอง |
รับพารามิเตอร์ | มันสามารถรับได้ในตัวชี้อาร์เรย์ขนาดหรืออาร์เรย์ที่ไม่ได้ระบุ | พารามิเตอร์ที่ได้รับจะต้องกำหนดมิติด้านขวาสุดของอาร์เรย์ |
ขนาด | มิติเดียว | สองมิติ |
คำจำกัดความของอาร์เรย์หนึ่งมิติ (อาร์เรย์ 1 มิติ)
อาร์เรย์หนึ่งมิติหรือมิติเดียวถือเป็น "รายการของตัวแปรชนิดข้อมูลที่คล้ายกัน" และแต่ละตัวแปรสามารถเข้าถึงได้อย่างชัดเจนโดยการระบุดัชนีในวงเล็บเหลี่ยมนำหน้าด้วยชื่อของอาร์เรย์นั้น

มาพูดคุยกันในบริบท C ++
// ประกาศใน C + + ประเภทตัวแปร _ ชื่อ [ขนาด];
ที่นี่ประเภทประกาศประเภทข้อมูลของตัวแปรอาร์เรย์และขนาดกำหนดจำนวนขององค์ประกอบที่อาร์เรย์จะถือ
ตัวอย่างเช่นถ้าเราต้องการประกาศอาร์เรย์ซึ่งจะมียอดคงเหลือของแต่ละเดือนของปี
// ตัวอย่าง int month_balance [12];
Month _balance เป็นตัวแปรอาร์เรย์ซึ่งจะถือจำนวนเต็ม 12 จำนวนซึ่งจะแสดงยอดคงเหลือของแต่ละเดือน ตอนนี้ถ้าเราต้องการเข้าถึงยอดคงเหลือของเดือน 'เมษายน' เราก็ต้องพูดถึงชื่อตัวแปรตามด้วยเครื่องหมายวงเล็บเหลี่ยมที่มีค่าดัชนีสำหรับเดือนเมษายนนั่นคือ 'month_balance [3]' แต่เป็น 'เมษายน' เป็นเดือนที่สี่ของปี แต่เราได้กล่าวถึง '[3]' เพราะอาร์เรย์ทั้งหมดมี 0 เป็นดัชนีขององค์ประกอบแรกของพวกเขา
ใน Java สิ่งนี้สามารถทำได้
// ประกาศใน Java type variable_name []; variable_name = new type [size];
ที่นี่เริ่มแรกเราได้ประกาศตัวแปรอาเรย์ด้วยประเภทของมันแล้วเราได้จัดสรรหน่วยความจำให้กับมันโดยใช้ 'ใหม่' และกำหนด 'ใหม่' ให้กับตัวแปรอาเรย์ที่ประกาศไว้ ลองมาตัวอย่างข้างต้นถ้าเราต้องการประกาศอาร์เรย์ซึ่งจะมียอดคงเหลือในแต่ละเดือนของปี
// ตัวอย่าง int month_balance []; month_balance = new int [12];
ที่นี่ 'ใหม่' จัดสรรหน่วยความจำให้กับตัวแปรอาร์เรย์“ month_balance” ดังนั้นตอนนี้ mont_balance จะถือหน่วยความจำสำหรับค่าจำนวนเต็ม 12 ค่า
อาร์เรย์สามารถเริ่มต้นได้เมื่อมีการประกาศ array initializer คือรายการของค่าที่คั่นด้วยเครื่องหมายจุลภาคล้อมรอบด้วยเครื่องหมายปีกกา
//ตัวอย่าง
int month_balance = {100, 500, 200, 750, 850, 250, 630, 248, 790, 360, 450, 180}
คำจำกัดความของอาร์เรย์สองมิติ (อาร์เรย์ 2 มิติ)
ทั้ง C ++ และ Java รองรับอาร์เรย์หลายมิติ หนึ่งในรูปแบบที่ง่ายที่สุดของอาเรย์หลายมิติคืออาเรย์สองมิติหรืออาเรย์ 2 มิติ อาร์เรย์สองมิติสามารถพิจารณาเป็น 'อาร์เรย์ของอาร์เรย์' หรือ 'อาร์เรย์ของอาร์เรย์หนึ่งมิติ' ในการประกาศตัวแปรอาเรย์สองมิติเราจะต้องระบุชื่ออาเรย์ตามด้วยวงเล็บเหลี่ยมสองตัวที่ดัชนีที่สองคือชุดที่สองของวงเล็บเหลี่ยม
อาร์เรย์สองมิติจะถูกจัดเก็บในรูปแบบของเมทริกซ์แถวคอลัมน์โดยที่ดัชนีแรกระบุว่าแถวและดัชนีที่สองระบุถึงคอลัมน์ ดัชนีที่สองหรือขวาสุดของอาร์เรย์เปลี่ยนแปลงอย่างรวดเร็วมากเมื่อเทียบกับดัชนีแรกหรือซ้ายสุดขณะที่เข้าถึงองค์ประกอบของอาร์เรย์

// ประกาศใน C ++ ประเภทตัวแปร _ ชื่อ [size1] [size2];
ตัวอย่างเช่นเราต้องการเก็บยอดคงเหลือทุกๆ 30 วันในแต่ละเดือนของปีในอาร์เรย์ 2 มิติ
// ตัวอย่าง int month_balance [12] [30];
ใน Java อาร์เรย์สองมิติได้มาจาก
// ประกาศใน Java ประเภทตัวแปร _ ชื่อ = ใหม่ int [size1] [size2]; // ตัวอย่าง int month_balance = new int [12] [30];
เนื่องจากเราไม่สามารถผ่านอาร์เรย์ทั้งหมดเป็นพารามิเตอร์ไปยังฟังก์ชันตัวชี้ไปยังองค์ประกอบแรกของอาร์เรย์จะถูกส่งผ่าน อาร์กิวเมนต์ที่ได้รับอาร์เรย์สองมิติจะต้องกำหนดว่าเป็นมิติที่เหมาะสมที่สุด ต้องใช้มิติด้านขวาสุดเนื่องจากคอมไพเลอร์ต้องการเพื่อยืนยันความยาวของแต่ละแถวหากต้องการทำดัชนีอาร์เรย์อย่างถูกต้อง หากไม่ได้กล่าวถึงดัชนีด้านขวาคอมไพเลอร์จะไม่สามารถกำหนดได้ว่าจะให้แถวถัดไปเริ่มต้นที่ใด
// ตัวอย่างใน Java ถือเป็นโมฆะ receiveing_funct (int a [] [10]) { . . }
เมื่อหน่วยความจำถูกจัดสรรแบบไดนามิกไปยังอาร์เรย์สองมิติใน Java ดัชนีซ้ายสุดจะถูกระบุและมิติที่เหลือสามารถจัดสรรแยกต่างหากเช่นแถวทั้งหมดของอาร์เรย์อาจไม่ได้มีขนาดเท่ากัน
// ตัวอย่างใน Java int month_balance = new int [12] []; month_balance [0] = new int [31]; month_balance [1] = new int [28]; month_balance [2] = new int [31]; month_balance [3] = new int [30]; month_balance [4] = new int [31]; month_balance [5] = new int [30]; month_balance [6] = new int [31]; month_balance [7] = new int [30]; month_balance [8] = new int [31]; month_balance [9] = new int [30]; month_balance [10] = new int [31]; month_balance [11] = new int [30]; month_balance [12] = new int [31];
แต่ไม่มีประโยชน์ในการทำเช่นนั้น
ความแตกต่างที่สำคัญระหว่างอาร์เรย์หนึ่งมิติกับสองมิติ
- อาร์เรย์หนึ่งมิติเป็นรายการที่มีองค์ประกอบของประเภทข้อมูลที่คล้ายกัน ในอีกทางหนึ่งอาเรย์สองมิติเป็นรายการที่มีองค์ประกอบเป็นอาเรย์ของชนิดข้อมูลที่คล้ายกัน
- ใน C ++ เมื่ออาร์เรย์หนึ่งมิติได้รับโดยพารามิเตอร์ของฟังก์ชั่นการรับไม่จำเป็นต้องพูดถึงขนาดของอาร์เรย์ในขณะที่คอมไพเลอร์เข้าใจว่าอาร์เรย์ของประเภท (กล่าวถึงประเภทข้อมูลพร้อมกับพารามิเตอร์) ที่มีความยาว จะได้รับ ในอาร์เรย์สองมิติจะต้องระบุดัชนีที่สองหรือขวาที่สุดเนื่องจากคอมไพเลอร์จำเป็นต้องทราบว่าจุดสิ้นสุดของแถวเดี่ยวและแถวใหม่เริ่มต้นที่ใด
- ใน C ++ อาร์เรย์หนึ่งมิติจะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่องในลำดับดัชนีในขณะที่อาร์เรย์สองมิติจะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่อง แต่เนื่องจากมีหลายแถวในอาร์เรย์สองมิติที่เก็บของ แถวแรกจะตามด้วยวินาทีและแถวที่สามเป็นต้น
บันทึก:
การส่งผ่านของทั้งสองอาร์เรย์หนึ่งมิติเช่นเดียวกับอาร์เรย์สองมิติไปยังฟังก์ชั่นที่คล้ายกันคือทั้งสองจะถูกส่งผ่านโดยชื่อของอาร์เรย์เท่านั้น
// ตัวอย่างผ่าน pass_funt (name_of_array);
สรุป:
ในอาเรย์ทั้งสองมิติและสองมิติดัชนีมีบทบาทที่สำคัญมากเพราะเป็นสิ่งเดียวที่ระบุองค์ประกอบในอาเรย์โดยเฉพาะ อาเรย์ทั้งสองมิติและสองมิติสามารถเริ่มต้นได้ ณ เวลาที่ประกาศ