Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

อธิบายพอยน์เตอร์และอาร์เรย์หนึ่งมิติในภาษาซี


ตัวชี้เป็นตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น

คุณสมบัติ

คุณสมบัติของพอยน์เตอร์อธิบายไว้ด้านล่าง -

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

การประกาศตัวชี้ การเริ่มต้น และการเข้าถึง

พิจารณาข้อความต่อไปนี้ −

int qty = 179;

ในหน่วยความจำ ตัวแปรสามารถแสดงได้ดังนี้ −

อธิบายพอยน์เตอร์และอาร์เรย์หนึ่งมิติในภาษาซี

การประกาศตัวชี้

หมายความว่า 'p' เป็นตัวแปรตัวชี้ซึ่งเก็บที่อยู่ของตัวแปรจำนวนเต็มอื่นตามที่กล่าวไว้ในคำสั่งด้านล่าง -

Int *p;

การเริ่มต้นของตัวชี้

ตัวดำเนินการที่อยู่ (&) ใช้เพื่อเริ่มต้นตัวแปรตัวชี้

ตัวอย่างเช่น −

int qty = 175;
int *p;
p= &qty;

อธิบายพอยน์เตอร์และอาร์เรย์หนึ่งมิติในภาษาซี

การเข้าถึงตัวแปรผ่านตัวชี้

ในการเข้าถึงค่าของตัวแปร จะใช้ตัวดำเนินการทางอ้อม (*)

ตัวอย่างเช่น −

อธิบายพอยน์เตอร์และอาร์เรย์หนึ่งมิติในภาษาซี

ที่นี่ '*' สามารถถือเป็นค่าที่อยู่

สองข้อความนี้เทียบเท่ากับข้อความต่อไปนี้ −

p = &qty;
n = *p; n =qty

พอยน์เตอร์และอาร์เรย์หนึ่งมิติ

  • คอมไพเลอร์จัดสรรตำแหน่งหน่วยความจำอย่างต่อเนื่องสำหรับองค์ประกอบทั้งหมดของอาร์เรย์
  • ที่อยู่ฐาน =ที่อยู่องค์ประกอบแรก (ดัชนี 0) ของอาร์เรย์
    • ตัวอย่างเช่น − int a [5] ={10, 20,30,40,50};

องค์ประกอบ

ห้าองค์ประกอบจะถูกเก็บไว้ดังนี้ -

อธิบายพอยน์เตอร์และอาร์เรย์หนึ่งมิติในภาษาซี

  • ถ้า 'p' ถูกประกาศเป็นตัวชี้จำนวนเต็ม ดังนั้นอาร์เรย์ 'a' สามารถชี้ได้โดยการกำหนดต่อไปนี้ -

p = a;
(or) p = &a[0];
  • ทุกค่าของ 'a' เข้าถึงได้โดยใช้ p++ เพื่อย้ายจากองค์ประกอบหนึ่งไปยังอีกองค์ประกอบหนึ่ง เมื่อตัวชี้เพิ่มขึ้น ค่าของตัวชี้จะเพิ่มขึ้นตามขนาดของประเภทข้อมูลที่ชี้ไป ความยาวนี้เรียกว่า "ตัวประกอบมาตราส่วน"

  • ความสัมพันธ์ระหว่าง 'p' และ 'a' มีคำอธิบายด้านล่าง -

P = &a[0] = 1000
P+1 = &a[1] = 1004
P+2 = &a[2] = 1008
P+3 = &a[3] = 1012
P+4 = &a[4] = 1016
  • ที่อยู่ขององค์ประกอบคำนวณโดยใช้ดัชนีและตัวประกอบขนาดของประเภทข้อมูล ตัวอย่างเพื่ออธิบายสิ่งนี้ได้รับพร้อมนี้

Address of a[3] = base address + (3* scale factor of int)
= 1000 + (3*4)
= 1000 +12
= 1012
  • สามารถใช้พอยน์เตอร์เพื่อเข้าถึงองค์ประกอบอาร์เรย์แทนที่จะใช้การจัดทำดัชนีอาร์เรย์

  • *(p+3) ให้ค่าของ a[3].

a[i] = *(p+i)

ตัวอย่างโปรแกรม

ต่อไปนี้เป็นโปรแกรม C สำหรับพอยน์เตอร์และอาร์เรย์หนึ่งมิติ -

#include<stdio.h>
main ( ){
   int a[5];
   int *p,i;
   printf ("Enter 5 lements");
   for (i=0; i<5; i++)
      scanf ("%d", &a[i]);
   p = &a[0];
   printf ("Elements of the array are");
   for (i=0; i<5; i++)
      printf("%d", *(p+i));
}

ผลลัพธ์

เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −

Enter 5 elements : 10 20 30 40 50
Elements of the array are : 10 20 30 40 50