ความแตกต่างระหว่าง Array กับ Pointer

ผู้เขียน: Laura McKinney
วันที่สร้าง: 1 เมษายน 2021
วันที่อัปเดต: 11 พฤษภาคม 2024
Anonim
Difference between arrays and pointers in C
วิดีโอ: Difference between arrays and pointers in C

เนื้อหา


มีความสัมพันธ์ใกล้ชิดระหว่างอาร์เรย์และตัวชี้ ตัวชี้สามารถใช้เพื่อเข้าถึงองค์ประกอบอาร์เรย์เข้าถึงทั้งอาร์เรย์โดยใช้ตัวชี้ทางคณิตศาสตร์ทำให้การเข้าถึงเร็วขึ้น มีความแตกต่างพื้นฐานระหว่างตัวชี้และอาเรย์นั่นคืออาเรย์คือชุดของตัวแปรของชนิดข้อมูลที่คล้ายกันในขณะที่ตัวชี้เป็นตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น มีความแตกต่างอื่น ๆ ระหว่างอาเรย์กับตัวชี้ที่กล่าวถึงด้านล่างในแผนภูมิเปรียบเทียบ

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบแถวชี้
การประกาศ// ใน C ++
พิมพ์ var_name;
// ในชวา
พิมพ์ var-name;
var_name = ประเภทใหม่;
// ใน C ++
พิมพ์ * var_name;
การทำงานเก็บค่าของตัวแปรของประเภทข้อมูลที่เป็นเนื้อเดียวกันเก็บที่อยู่ของตัวแปรอื่นที่เป็นประเภทข้อมูลเดียวกันกับตัวแปรตัวชี้ประเภทข้อมูล
รุ่นอาร์เรย์ของพอยน์เตอร์สามารถสร้างขึ้นได้สามารถสร้างตัวชี้ไปยังอาร์เรย์ได้
การสนับสนุน Javaสนับสนุนแนวคิดของอาเรย์ไม่รองรับพอยน์เตอร์
การเก็บรักษาอาเรย์ปกติจะเก็บค่าของตัวแปรและอาเรย์ตัวชี้จะเก็บที่อยู่ของตัวแปรพอยน์เตอร์ได้รับการออกแบบมาเป็นพิเศษเพื่อเก็บที่อยู่ของตัวแปร
ความจุอาเรย์สามารถจัดเก็บจำนวนองค์ประกอบที่กล่าวถึงในขนาดของตัวแปรอาเรย์ ตัวแปรตัวชี้สามารถเก็บที่อยู่ของตัวแปรได้ครั้งละหนึ่งตัวเท่านั้น


นิยามของ Array

อาร์เรย์คือชุดขององค์ประกอบของประเภทข้อมูลเดียวกันและองค์ประกอบเหล่านี้ทั้งหมดจะถูกเรียกโดยชื่อสามัญซึ่งเป็นชื่อของตัวแปรอาร์เรย์ องค์ประกอบอาร์เรย์สามารถเข้าถึงได้โดยการเข้าถึงดัชนีเฉพาะของอาร์เรย์นั้นซึ่งองค์ประกอบนั้นถูกเก็บไว้อาเรย์สามารถเป็นอาร์เรย์หนึ่งมิติอาร์เรย์สองมิติหรืออาร์เรย์หลายมิติได้ อาร์เรย์ของพอยน์เตอร์สามารถสร้างได้เช่นอาเรย์ที่มีตัวแปรทั้งหมดเป็นตัวแปรพอยน์เตอร์ ใน 'C ++' อาร์เรย์จะได้รับการจัดสรรแบบคงที่ส่วนใน "Java" จะมีการจัดสรรอาร์เรย์แบบไดนามิก

// ในประเภท C ++ var_name; // ในชวา พิมพ์ var-name; var_name = ประเภทใหม่;

ที่นี่ 'ประเภท' หมายถึงชนิดข้อมูลของตัวแปรอาเรย์ 'var_name' หมายถึงชื่อที่กำหนดให้กับตัวแปรอาเรย์ 'ขนาด' แสดงถึงความจุของตัวแปรอาเรย์เช่นจำนวนองค์ประกอบ 'ประเภท' ที่สามารถเก็บไว้ในตัวแปรอาเรย์นั้น . มีวิธีการเข้าถึงอาเรย์สองวิธีโดยหนึ่งคือ 'ตัวคำนวณเลขคณิต' ตัวแรกและตัวทำดัชนีอาร์เรย์ตัวที่สองซึ่ง 'ตัวชี้เลขคณิต' นั้นเร็วกว่า


// การเข้าถึงโดยใช้ตัวชี้ทางคณิตศาสตร์ Void display_array (int * S) {ในขณะที่ (* s) {cout (<< "ค่าคือ" << * s); * s ++; }}

การใช้ 'ตัวคำนวณเลขคณิต' จะทำงานได้เร็วขึ้นเมื่อเทียบกับ 'การจัดทำดัชนีอาร์เรย์' เช่นการเข้าถึงตัวแปรอาร์เรย์โดยใช้ดัชนี หากคุณต้องการส่งอาเรย์ของพอยน์เตอร์ไปยังฟังก์ชั่นก็สามารถทำได้โดยใช้วิธีการเดียวกับที่คุณใช้ในการส่งอาเรย์ปกติเช่นเรียกใช้ฟังก์ชันโดยตรงด้วยชื่อของอาเรย์โดยไม่มีดัชนีใด ๆ

ให้เราเข้าใจด้วยตัวอย่าง

// ประกาศอาร์เรย์ของพอยน์เตอร์ int * p;

ที่นี่แสดงให้เห็นว่า ‘p’ เป็นอาร์เรย์ประเภทจำนวนเต็มจะเก็บที่อยู่ของตัวแปร 10 ประเภทจำนวนเต็ม ขอให้เราส่งอาร์เรย์ตัวชี้ด้านบนไปยังฟังก์ชั่นการแสดงผล ()

แสดงผล (p); // โทรฟังก์ชั่นการแสดงผล void display (int * d) {// ฟังก์ชั่นรับอาร์เรย์ตัวชี้ สำหรับ (int i = 0; i <10; i ++) {ศาล << ("index" <

ฟังก์ชั่นนี้จะแสดงค่าที่มีอยู่ในตัวแปรที่มีที่อยู่จะถูกเก็บไว้ในอาร์เรย์ตัวชี้ตามลำดับ

ความหมายของตัวชี้

ตัวชี้เป็นตัวแปรที่เก็บที่อยู่หน่วยความจำของตัวแปรอื่น ประเภทข้อมูลของทั้งสองตัวแปรตัวชี้และตัวแปรที่มีที่อยู่จะถูกกำหนดให้กับตัวแปรตัวชี้จะต้องเหมือนกัน ตัวแปรพอยน์เตอร์จะประกาศตามดังต่อไปนี้

// ประกาศในชื่อ C ++ type *;

ที่นี่ ‘type’ เป็นประเภทข้อมูล ‘name’ เป็นชื่อของตัวแปรตัวชี้ ‘type’ กำหนดประเภทของที่อยู่ตัวแปรที่สามารถเก็บไว้ในตัวแปรพอยน์เตอร์ ตัวอย่างเช่นตัวชี้จำนวนเต็มจะเก็บที่อยู่ของตัวแปรจำนวนเต็ม มีตัวดำเนินการตัวชี้สองตัวคือ ‘*’ และ ‘&’ ผู้ประกอบการ ‘*’ ส่งคืนค่าที่อยู่ที่อยู่ซึ่งถูกเก็บไว้ในตัวแปรตามด้วยเครื่องหมาย ‘*’ ตัวดำเนินการ ‘&’ จะส่งคืนที่อยู่ของตัวแปรตามด้วยเครื่องหมาย ‘&’

// ตัวอย่างเช่น int b = 10 int a = & b; // ที่นี่ที่อยู่ของ b ถูกเก็บไว้ในตัวแปร a // ให้ที่อยู่ของ b คือ 2000 ดังนั้นตอนนี้ = 2000 int c = * a; // ที่นี่ตัวแปรตัวชี้จำนวนเต็ม * a จะคืนค่าซึ่งตั้งอยู่ที่ที่อยู่ที่เก็บไว้ใน. ii c = 10

มีตัวดำเนินการทางคณิตศาสตร์เพียงสองตัวเท่านั้นที่คุณสามารถใช้กับพอยน์เตอร์เช่นการเพิ่มและการลบ หากคุณใช้การเพิ่มขึ้นของตัวแปรตัวชี้จำนวนเต็มจะเพิ่มขึ้นตามขนาดของประเภทข้อมูลเช่น 2 ไบต์เนื่องจากเป็นตัวชี้จำนวนเต็มการเพิ่มจะต้องชี้ตัวแปรจำนวนเต็มถัดไป เป็นกรณีเดียวกันกับการลดลง

// p เป็นตัวชี้จำนวนเต็มที่มีมูลค่า 2,000 p ++; // ตอนนี้ p = 2002 p--; // ตอนนี้ p มี 2,000 อีกครั้งที่ลดลงสองไบต์

  1. อาร์เรย์จะจัดเก็บตัวแปรของชนิดข้อมูลที่คล้ายคลึงกันและชนิดข้อมูลของตัวแปรนั้นจะต้องตรงกับประเภทของอาร์เรย์ ในทางกลับกันตัวแปรตัวชี้จะจัดเก็บที่อยู่ของตัวแปรประเภทที่คล้ายกับประเภทของตัวแปรประเภทตัวชี้
  2. เราสามารถสร้างอาเรย์ของพอยน์เตอร์เช่นอาเรย์ซึ่งตัวแปรคือตัวแปรพอยน์เตอร์ ในทางกลับกันเราสามารถสร้างตัวชี้ที่ชี้ไปยังอาร์เรย์
  3. Java รองรับอาเรย์ แต่มันไม่รองรับพอยน์เตอร์
  4. ขนาดอาร์เรย์ตัดสินใจจำนวนตัวแปรที่สามารถจัดเก็บได้ในขณะที่ ตัวแปรตัวชี้สามารถเก็บที่อยู่ของตัวแปรเท่านั้น

บันทึก:

Java ไม่สนับสนุนหรือหลีกเลี่ยงพอยน์เตอร์อย่างเคร่งครัด

สรุป:

เมื่อเราต้องการทำงานกับองค์ประกอบข้อมูลของชนิดข้อมูลที่คล้ายกันแทนที่จะทำงานแยกกันกับตัวแปรเราสามารถสร้างอาร์เรย์ของตัวแปรเหล่านั้นของชนิดข้อมูลที่คล้ายกันแล้วดำเนินการกับมัน พอยน์เตอร์จำเป็นสำหรับบางโปรแกรมมันให้พลังมหาศาล แต่น่าเสียดายถ้าตัวชี้มีค่าที่ไม่ถูกต้องมันจะเป็นบั๊กที่หายากที่สุด