C ตัวชี้ไปยังอาร์เรย์
คุณสามารถข้ามบทนี้แล้วรอที่จะเข้าใจแนวคิดของตัวชี้ C ที่มาเรียนรู้ในบทนี้
ถ้าคุณเข้าใจแนวคิดของตัวชี้ในภาษา C แล้วคุณสามารถเริ่มต้นที่จะเรียนรู้ในบทนี้ ชื่ออาร์เรย์เป็นตัวชี้คงชี้ไปที่องค์ประกอบแรกของอาร์เรย์ ดังนั้นในคำสั่งดังต่อไปนี้:
double balance[50];
ความสมดุลเป็นจุดและยอดคงเหลือ [0] ชี้ที่อยู่ในองค์ประกอบแรกของอาร์เรย์ของสมดุลดังนั้นต่อไปนี้P โปรแกรมชิ้นส่วนได้รับมอบหมายให้องค์ประกอบแรกของความสมดุลในที่อยู่:
double *p; double balance[10]; p = balance;
ใช้เป็นชื่อตัวชี้อาร์เรย์คงถูกต้องตามกฎหมายและในทางกลับกัน ดังนั้น * (ยอด +4) คือสมดุล [4] วิธีที่ถูกต้องตามกฎหมายในการเข้าถึงข้อมูล
เมื่อคุณได้อยู่ที่เก็บไว้ในองค์ประกอบแรกของ P, คุณสามารถใช้ p * * * * * (P + 1) * (P + 2) และเพื่อให้การเข้าถึงองค์ประกอบอาร์เรย์ ตัวอย่างต่อไปนี้แสดงให้เห็นถึงแนวคิดเหล่านี้ที่กล่าวข้างต้นไปที่:
#include <stdio.h> int main () { /* 带有 5 个元素的整型数组 */ double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; int i; p = balance; /* 输出数组中每个元素的值 */ printf( "使用指针的数组值\n"); for ( i = 0; i < 5; i++ ) { printf("*(p + %d) : %f\n", i, *(p + i) ); } printf( "使用 balance 作为地址的数组值\n"); for ( i = 0; i < 5; i++ ) { printf("*(balance + %d) : %f\n", i, *(balance + i) ); } return 0; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
โดยใช้ตัวชี้ค่าอาร์เรย์ * (P + 0): 1000.000000 * (P + 1): 2.000000 * (P + 2): 3.400000 * (P + 3): 17.000000 * (P + 4): 50.000000 ใช้ค่าสมดุลเป็นที่อยู่อาร์เรย์ * (ยอด + 0): 1000.000000 * (สมดุล + 1): 2.000000 * (สมดุล + 2): 3.400000 * (สมดุล + 3): 17.000000 * (สมดุล + 4): 50.000000
ในตัวอย่างข้างต้นพีเป็นตัวชี้ไปยังตัวชี้ประเภทคู่ซึ่งหมายความว่ามันสามารถเก็บไว้ในตัวแปรประเภทคู่ได้ เมื่อเรามีP ที่อยู่ * p-value ของ P จะได้รับอยู่หน่วยความจำที่สอดคล้องกันที่แสดงให้เห็นในตัวอย่างข้างต้น