สวัสดีและยินดีต้อนรับ.
ในการบรรยายนี้ฉันอยากจะพูด เกี่ยวกับอาร์เรย์หลายมิติ
จนถึงจุดนี้ ถ้าคุณได้ นึกถึงอาร์เรย์ คุณแค่บอกว่าอาร์เรย์เป็นตัวแปรที่
สามารถเก็บข้อมูลได้หลายประเภท
มันอาจจะซับซ้อนกว่านั้น
โดยทั่วไปคุณสามารถมีได้มากมาย ขนาดของอาร์เรย์
ดังนั้นหากคุณมีอาร์เรย์เชิงเส้น ซึ่งเป็นสิ่งที่เราได้พูดคุยกันจนถึงตอนนี้
เรียกว่ามิติเดียว
และเรารู้ว่ามันโสด มิติเพราะมันมีวงเล็บเดียวที่มีขนาดเดียว
ภาษาซีช่วยให้อาร์เรย์ ขนาดใด ๆ ที่จะปรับ
นี่เป็นความคิดแบบ a อาร์เรย์ที่ซ้อนกัน อาร์เรย์ของอาร์เรย์
อาร์เรย์สองมิติดังนั้น เป็นเรื่องธรรมดาที่สุด
แต่ทำได้จริง อาร์เรย์สามมิติ อาร์เรย์สี่มิติ
อาร์เรย์ห้ามิติ แต่มีกรณีการใช้งานไม่มากสำหรับ
3 4 และ 5
จริงๆ คุณกำลังจะไป มีอาร์เรย์แบบมิติเดียวที่คุณใช้ในโปรแกรมของคุณ
หรืออาร์เรย์สองมิติ
อาร์เรย์สองมิติเป็นเรื่องธรรมดา เพราะมันเป็นตัวแทนของแถวและคอลัมน์ในสเปรดชีต
นั่นคือวิธีที่คุณสามารถนึกภาพมันหรือเมทริกซ์หรือตารางได้
นั่นคืออาร์เรย์สองมิติ คุณมีแถวและคุณมีคอลัมน์
ให้คุณเก็บข้อมูลได้มากขึ้น กว่าอาร์เรย์มิติเดียวโดยระบุขนาด
แต่ใช้ได้ดีมาก เพราะมันดูเหมือนเมทริกซ์
และมีแอพพลิเคชั่นที่ คุณอาจต้องการเขียนที่มีแนวคิดของเมทริกซ์นี้โดยเฉพาะ
แอปพลิเคชันทางคณิตศาสตร์จะมีความเกี่ยวข้องมากที่สุดที่นี่
แต่ใช้ทำแบบสองมิติได้ อาร์เรย์สำหรับสิ่งต่าง ๆ มากมาย
ตัวอย่างหนึ่งคือเมทริกซ์
แต่ลองนึกภาพมันเป็นตารางอีกครั้ง
อาร์เรย์สองมิติคือ ประกาศในลักษณะเดียวกับอาร์เรย์หนึ่งมิติ
ความแตกต่างเพียงอย่างเดียวคือคุณตอนนี้ มีวงเล็บอีกชุดหนึ่ง
ในตัวอย่างนี้ เรากำลังประกาศ อาร์เรย์ชื่อเมทริกซ์ประเภท
int ซึ่งมี 4 แถวและ 5 คอลัมน์
นั่นหมายความว่าคุณสามารถจัดเก็บ 20 องค์ประกอบ ภายในอาร์เรย์สองมิตินั้น
ดังนั้นคุณควรรู้ว่าแต่ละอย่างเป็นอย่างไร มิติถูกระบุด้วยวงเล็บเหลี่ยมคู่ของตัวเอง
นั่นเป็นวิธีที่คุณสามารถมองเห็นได้ง่าย อาร์เรย์มีมิติข้อมูลเท่าใด
ถ้าคุณมี 3 วงเล็บตรงนั้น นั่นคือ จะเป็นอาร์เรย์สามมิติ
ถ้าคุณมี 4 มันจะเป็นสี่
อันนี้มี 2 มันคือ 2
และจนกระทั่งก่อนหน้านี้ การบรรยายมีเพียงหนึ่งเดียว เราจึงรู้ว่านั่นเป็นมิติเดียว
ดังนั้นดูที่วงเล็บ ให้ความสนใจกับสิ่งนั้น
อีกครั้ง 4 แถว 5 คอลัมน์ รวม 20 องค์ประกอบ
ในการเริ่มต้นอาร์เรย์สองมิติ มันจะถูกเริ่มต้นในลักษณะเดียวกับหนึ่งมิติ
array, syntax ชนิดเดียวกัน, คุณกำลังจะเพิ่มอีก
ดังนั้นเมื่อคุณแสดงรายการองค์ประกอบ สำหรับการเริ่มต้น ค่าจะถูกแสดงรายการตามแถว
และความแตกต่างที่นี่คือ เมื่อคุณใส่ค่าเริ่มต้นสำหรับแต่ละแถว
คุณจะต้องทำ ระหว่างวงเล็บปีกกา วงเล็บปีกกา แล้วคุณจะใส่ แถวทั้งหมดระหว่างวงเล็บปีกกา
มันก็จะดูๆ หน่อย บางอย่างเช่นนี้
ถ้าเราสร้างอาร์เรย์ของตัวเลข ซึ่งมี 2 มิติ 3 แถว
4 คอลัมน์ และเราต้องการ เริ่มต้น สิ่งที่คุณต้องทำคือใส่ในวงเล็บปีกกา
อาร์เรย์ทั้งหมดแล้วเพิ่มวงเล็บปีกกาที่ซ้อนกันภายในสำหรับแต่ละแถว
ที่นี่เรากำลังเริ่มต้นค่า 0 sub-0 ถึง 10, 0 sub-1 ถึง 20, 0 sub-2
ถึง 30 และ 0 sub-3 ถึง 40
และนั่นคือวิธีที่คุณเข้าถึง อาร์เรย์หลายมิติด้วย
คุณเข้าถึงได้ด้วย แถวในคอลัมน์
แค่ต้องจำไว้ ว่ามันเป็น 0 ตาม
ดังนั้นมือบนซ้ายซึ่ง จะเป็นแถวที่ 1 คอลัมน์ 1 จะเป็น 00 และนั่นจะเท่ากับ
10
แถวที่ 1 คอลัมน์ 2 จะเป็น เท่ากับ 20 แต่คุณจะเข้าถึงมันเป็นตัวเลข
0 ย่อย-1
เนื่องจากอาร์เรย์แรกมี3 แถวที่คุณเข้าถึง นั่นคือตัวเลขที่คุณระบุสำหรับหมายเลขแถวและ หมายเลขคอลัมน์จะเป็นข้อกำหนดถัดไปสำหรับการเข้าถึงอาร์เรย์
แต่บุคลิกส่วนตัวก็สวย ง่าย ๆ เพียงแยกสิ่งต่าง
ๆ ตามความคิดเห็นด้วยวงเล็บ
และเข้าถึงพวกเขา คุณจะเข้าถึง มันเหมือนกับที่คุณเข้าถึงอาร์เรย์ปกติ
ยกเว้นตอนนี้คุณกำลังเข้าถึง แนวคิดของแถวในคอลัมน์นี้
ดังนั้นการใช้คู่ภายในของ จริง ๆ แล้ว เหล็กจัดฟันเป็นทางเลือก แต่คุณควรใช้เพื่อให้อ่านง่าย
หากคุณไม่ได้จัดฟันเหล่านั้น ที่จริงคุณสามารถให้
10 20 30 40 15 25 35 ทั้งหมดเพียงแค่ อย่างต่อเนื่อง แต่เป็นการยากมากที่จะนึกภาพสิ่งที่คุณกำลังเริ่มต้น
ในฐานะโปรแกรมเมอร์ ความสามารถในการอ่านคือ สำคัญมากเพราะจะเพิ่มคุณภาพของโค้ด
มันง่ายกว่าในการดูแลรหัส
เมื่อฉันดูนี่ตรงนี้ ฉันสามารถระบุได้อย่างง่ายดาย โดยเฉพาะอย่างยิ่งกับความคิดเห็น
สิ่งที่ฉัน กำลังเริ่มต้นไปที่ ค่าใด และแถวใดที่จะเริ่มต้น
ถ้าฉันมีสิ่งนั้นเป็นบรรทัดเดียว แค่เลขเรียงกันก็จะหายเร็วมาก
ดังนั้นแม้ว่าวงเล็บด้านใน ไม่จำเป็น ใช้มัน
เช่นเดียวกับอาร์เรย์หนึ่งมิติ ไม่จำเป็นต้องมีการเริ่มต้นอาร์เรย์ทั้งหมด
คุณสามารถเริ่มต้นเฉพาะบางพื้นที่ได้
ในตัวอย่างนี้ เรากำลัง การสร้างอาร์เรย์สองมิติที่มี
4 แถวและ 5 คอลัมน์
เราเพิ่งเริ่มต้น 3 องค์ประกอบแรกของแต่ละแถว
ดังนั้นแถวที่ 1 คอลัมน์ที่ 1 คือ 10 แถว 1 คอลัมน์ 2 คือ 5 และแถว 1 คอลัมน์ 3 เป็นลบ 3 และ
เหมือนกันสำหรับคอลัมน์ที่สองและอื่น
ๆ 900 32 31 008
สำหรับคนเราไม่ได้ตั้ง ค่าที่ 4 และ 5 ของแต่ละแถว
ที่เป็นจริง ให้ตั้งค่าเป็น 0 โดยอัตโนมัติเพราะเราปล่อยทิ้งไว้
และในกรณีนี้ คุณ ต้องจัดเหล็กดัดผมด้านใน
เพราะที่นี่ถ้าเราทำ มันการเริ่มต้นจะผิดพลาดทั้งหมด
เพราะถ้าไม่มี ดัดเหล็กดัดฟันก็จะทำแบบต่อเนื่องกัน
แล้วนี่จะเกิดอะไรขึ้น จะเริ่มต้น
12 องค์ประกอบแรกจริง ๆ
ดังนั้นมันจะเริ่มต้นทั้งหมด องค์ประกอบในแถวแรก องค์ประกอบทั้งหมดในแถวที่สอง
จากนั้น 2 องค์ประกอบแรกในแถวที่สาม จากนั้นองค์ประกอบที่เหลือ
ในแถวที่สาม องค์ประกอบที่เหลือในแถวที่ 4 จะเป็น 0
อีกครั้ง นี่คือสองมิติ อาร์เรย์ 4 แถวและ 5 คอลัมน์
มันจะทำพวกเขาติดต่อกัน
ดังนั้นอย่าลืมจัดฟันถ้า คุณคือถ้าคุณต้องการระบุองค์ประกอบการเริ่มต้นบางอย่างเท่านั้น
คุณก็ทำได้ ตัวเริ่มต้นที่กำหนด
จำไว้ว่านี่คือแนวคิด C99
นั่นเป็นทางเลือกใน C11 โดยที่ คุณสามารถระบุดัชนีเฉพาะที่จะเริ่มต้นได้
เพื่อให้คุณสามารถใช้ตัวห้อยใน รายการเริ่มต้น เช่นเดียวกับในอาร์เรย์มิติเดียวถ้าคุณต้องการ
ในการทำ initializer ที่กำหนด คุณจะต้องทำสิ่งนี้
ตรงนี้เรากำลังประกาศเมทริกซ์ อาร์เรย์ของ 4 แถวและ 3 คอลัมน์
แต่จริงๆ แล้วเรากำลังระบุ 0 0 เท่ากับ 1, 1 1 เท่ากับ
5 และ 2 2 เท่ากับ 9
ดังนั้นเมื่อเราพูด 2 2 อีกครั้ง อะไรนะ เรากำลังบอกว่าเป็นแถวที่ 2 ซึ่งเป็นแถวที่
3 จริงๆ เพราะเราเริ่มที่ 0 คอลัมน์ 2 ซึ่งก็คือคอลัมน์ 3 จริงๆ
อีกครั้ง ให้นึกภาพนี้เป็น ตารางหรือสเปรดชีต
และการเข้าถึงองค์ประกอบเริ่มต้น ที่มุมซ้ายบน
แต่ถ้าคุณเข้าใจว่า 4 แทนแถว และ 3 แทนคอลัมน์ มันคือ
ค่อนข้างใช้งานง่ายหลังจากนั้น
ที่กำลังทำอยู่นี้ก็คือ เริ่มต้น 3 องค์ประกอบที่ระบุของเมทริกซ์เป็นค่าที่ระบุ
แต่สิ่งที่ควร แจ้งให้ทราบว่านี่คือไวยากรณ์
ค่าที่ไม่ระบุทั้งหมดที่นี่ จะเป็น 0 ตามค่าเริ่มต้น
ได้แค่นี้ เพื่อเริ่มต้น 3 ค่า
แต่ละชุดของค่าที่คุณ เริ่มต้นจะเป็นองค์ประกอบในแถวอยู่ระหว่างวงเล็บปีกกา
จากนั้นการเริ่มต้นทั้งหมด ไประหว่างวงเล็บอีกคู่หนึ่ง
คุณจะเห็นว่าเรามี วงเล็บปีกกาที่ด้านนอกเหมือนกับการเริ่มต้นปกติ
แล้วเราก็มีวงเล็บเพื่อเข้าถึงอาร์เรย์ภายใน
แล้วเราก็มีเครื่องหมายจุลภาคถึง แยกแต่ละแถวและแต่ละชุดของค่าแถวจะถูกแยกออก
จากชุดถัดไปด้วยเครื่องหมายจุลภาค
ค่าจึงถูกแยกออก และดัชนีแถวด้วย
เพียงเพราะเราบอกว่า เรามี 2 มิติ และเรากำลังพูดถึงเรื่องนั้นอยู่
คุณสามารถ จริงๆ แล้วยังมีมิติอื่นๆ อีกมากมาย
ทุกเรื่องที่เคยคุยด้วย 2 มิติยังใช้กับ
3 มิติ 4 มิติ 5 มิติด้วย
ดังนั้น หากท่านต้องการประกาศ
a อาร์เรย์ 3 มิติ คุณจะใช้วงเล็บเหลี่ยม 3 ตัว
นี่คืออาร์เรย์ชื่อ box ชนิด int 10 20 และ 30
คุณอาจต้องการใช้ a อาร์เรย์สามมิติบางทีถ้าคุณเก็บค่า
xyz ไว้บ้าง คุณอาจไม่จำเป็นต้องทำเช่นนี้
อาร์เรย์สามมิติและ ขึ้นไม่ธรรมดาจริงๆ
โดยสรุป คุณสามารถเห็นภาพ a อาร์เรย์หนึ่งมิติเป็นแถวของข้อมูล
แถวเดียว สองมิติ อาร์เรย์เป็นตารางเมทริกซ์หรือสเปรดชีตในรูปแบบสามมิติ
อาร์เรย์ คุณสามารถแสดงภาพเป็นกองของตารางข้อมูล ดังนั้นจึงเป็นกองของตาราง
หากคุณต้องการข้อมูลมากขนาดนั้น มันจะเป็นเรื่องยากมากที่จะเข้าถึงมันและอาจสร้างความสับสน
และใครก็ตามที่รักษาสิ่งนี้ไว้ โปรแกรมสำหรับอาร์เรย์สามมิติขึ้นไปก็เป็นไปได้
หลงทางในการพยายามคิดว่าเกิดอะไรขึ้น แต่คุณทำได้ อีกครั้งและถ้าคุณจะต้องทำซ้ำผ่านสิ่งเหล่านี้
อาร์เรย์หนึ่ง สอง สามมิติ คุณอาจจะต้องใช้ลูป
และยิ่งมีมิติมากขึ้น ในลูป คุณจะมีลูปที่ซ้อนกันมากขึ้น
ดังนั้นหากคุณต้องการประมวลผล a อาร์เรย์สามมิติ
คุณจะมี 3 ลูปที่ซ้อนกัน
และถ้าคุณต้องการประมวลผล a อาร์เรย์สี่มิติ
คุณจะมี 4 ลูปที่ซ้อนกัน
เท่าที่เริ่มต้นอาร์เรย์ ที่สูงกว่า 2 มิติ อีกครั้ง คุณกำลังจะใช้
แบบเดียวกัน คุณแค่จะขยายมันออกไปอีกหน่อย
ดังนั้นอาร์เรย์สามมิติ จะมีการจัดฟันซ้อน
3 ระดับกับระดับชั้นใน มีชุดของค่าเริ่มต้นสำหรับแต่ละแถว
ดังนั้นมันจะ มีลักษณะเช่นนี้
ที่นี่เรามีสามมิติ array, 2 3 และ 4, สแต็คของตารางข้อมูลโดยพื้นฐานแล้ว
และบล็อกแรก 3 แถว เราจะเริ่มต้นและบล็อกที่สองของ
3 แถว เราจะเริ่มต้น
มันพูดแบบนี้อีกแล้ว บล็อกแรกและบล็อกที่สองเพราะเราไม่ได้เริ่มต้น
บล็อกที่สามและสี่ แค่บล็อกแรกและบล็อกที่สอง
เรามี 4 บล็อกและคุณ สามารถคิดได้ว่าเมื่อแต่ละกลุ่มบล็อกตารางข้อมูลแต่ละชุด
บล็อกที่มีแถวและคอลัมน์
ดังนั้นบล็อกแรกจะเป็น การเริ่มต้นเพียง 3 แถวแรก ซึ่งเรามีเพียงแค่
3 แถวเท่านั้น
แล้วบล็อกที่สองกำลังจะไป เพื่อเริ่มต้น 3 แถวถัดไป แต่บล็อกที่สามและสี่
จะไม่ถูกเตรียมใช้งาน
หากคุณต้องการเริ่มต้น บล็อกที่สามและสี่
คุณจะมีเหล็กจัดฟันด้านในมากกว่านี้ วงเล็บปีกกาและอื่น ๆ
สิ่งเดียวกันนี้ใช้กับ ที่คุณไม่ได้เริ่มต้น
พวกเขาจะเริ่มต้นเป็น 0
แต่อีกครั้งคุณสามารถดูวิธีการ มันน่าเบื่อมากและยากที่จะทำตาม
เมื่อคุณต้องการประมวลผลองค์ประกอบ ในอาร์เรย์มิติ ฉันพูดถึง
คุณจะใช้การวนซ้ำซ้อน
อีกครั้งมันจะสอดคล้อง โดยตรงกับจำนวนมิติ
และแต่ละลูปจะไปที่ วนซ้ำมากกว่าหนึ่งมิติอาร์เรย์
มันก็จะดูๆ หน่อย บางอย่างเช่นนี้
นี่คือตัวอย่างของ อาร์เรย์สามมิติ
คุณมีวงนอกและ แล้วคุณมี 2 วงใน
วงนอกจะเป็น อาร์เรย์ภายนอกแรก ดังนั้นวงรอบนอกจะต้องผ่านเป็นหลัก แถวที่สองจะผ่านคอลัมน์และที่สาม
หนึ่งจะผ่านบล็อก
อีกครั้งสิ่งที่คุณควรสังเกต คือว้าว มันมีขนดกและน่าเบื่อมาก
เร็วมาก
ดังนั้นพยายามหลีกเลี่ยงสามมิติ อาร์เรย์สี่มิติและฉันไม่เห็นประโยชน์มากนัก
หนึ่งและสองคือทั้งหมดที่คุณจะใช้
แต่เข้าใจหลายมิติ อาร์เรย์มีความเป็นไปได้ใน c ซึ่งเป็นวิธีการจัดเก็บข้อมูลและการเข้าถึงเพิ่มเติม
ชื่อเดียวกันกับองค์ประกอบข้อมูลจำนวนมาก ขอขอบคุณ.