c ++ เลขคณิตชี้
ชี้เป็นที่อยู่ของการแสดงตัวเลข ดังนั้นคุณสามารถดำเนินการทางคณิตศาสตร์ในการชี้ ชี้สามารถดำเนินการทางคณิตศาสตร์ที่สี่: +, -, +, -
PTR สมมติว่าเป็นตัวชี้ไปยังที่อยู่ของตัวชี้จำนวนเต็ม 1000 เป็น 32 บิตจำนวนเต็มให้เลขคณิตชี้เพื่อดำเนินการต่อไปนี้:
ptr++
หลังจากการดำเนินการดำเนินการดังกล่าวจุดPTR ไปยังตำแหน่งที่ 1004 เพราะ PTR แต่ละเวลาเพิ่มเติมก็จะชี้ไปที่ตำแหน่งจำนวนเต็มถัดไปที่ตำแหน่งปัจจุบันย้ายกลับสี่ไบต์ในกรณีของการดำเนินการนี้จะไม่ส่งผลกระทบต่อมูลค่าที่แท้จริงของสถานที่ตั้งของหน่วยความจำที่ย้ายตัวชี้ไปยังตำแหน่งของหน่วยความจำต่อไป ถ้าPTR จุดไปยังที่อยู่ของ 1000 ตัวอักษรที่ดำเนินการดังกล่าวจะทำให้เกิดการชี้ไปยังตำแหน่งของ 1001 เพราะตำแหน่งตัวอักษรถัดไป 1001
การเพิ่มตัวชี้
เราต้องการที่จะใช้ตัวชี้แทนของอาร์เรย์ในโปรแกรมเพราะตัวชี้ตัวแปรจะเพิ่มขึ้นและอาเรย์ไม่สามารถเพิ่มเพราะอาร์เรย์เป็นตัวชี้คงที่ โปรแกรมต่อไปนี้เพิ่มตัวชี้ตัวแปรตามลำดับการเข้าถึงแต่ละองค์ประกอบในอาร์เรย์:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Address of var[0] = 0xbfa088b0 Value of var[0] = 10 Address of var[1] = 0xbfa088b4 Value of var[1] = 100 Address of var[2] = 0xbfa088b8 Value of var[2] = 200
พร่องตัวชี้
ในทำนองเดียวกันชี้เป็น decremented และลบจำนวนไบต์ที่มีค่าของชนิดข้อมูลดังต่อไปนี้:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中最后一个元素的地址 ptr = &var[MAX-1]; for (int i = MAX; i > 0; i--) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 移动到下一个位置 ptr--; } return 0; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Address of var[3] = 0xbfdb70f8 Value of var[3] = 200 Address of var[2] = 0xbfdb70f4 Value of var[2] = 100 Address of var[1] = 0xbfdb70f0 Value of var[1] = 10
เปรียบเทียบตัวชี้
ชี้สามารถนำมาใช้เพื่อเปรียบเทียบความสัมพันธ์ระหว่างผู้ประกอบการเช่น == <และ> หาก P1 และ P2 จุดสองตัวแปรที่เกี่ยวข้องเช่นกับอาร์เรย์ขององค์ประกอบที่แตกต่างกันก็สามารถขนาดของ P1 และ P2 เมื่อเทียบ
ขั้นตอนต่อไปจะปรับเปลี่ยนตัวอย่างข้างต้นเป็นเวลานานเป็นที่อยู่ขององค์ประกอบสุดท้ายของตัวชี้ตัวแปรที่อยู่ของอาร์เรย์มีค่าน้อยกว่าหรือเท่ากับ & var [MAX - 1] ใส่ตัวแปรตัวชี้จะเพิ่มขึ้น:
#include <iostream> using namespace std; const int MAX = 3; int main () { int var[MAX] = {10, 100, 200}; int *ptr; // 指针中第一个元素的地址 ptr = var; int i = 0; while ( ptr <= &var[MAX - 1] ) { cout << "Address of var[" << i << "] = "; cout << ptr << endl; cout << "Value of var[" << i << "] = "; cout << *ptr << endl; // 指向上一个位置 ptr++; i++; } return 0; }
เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:
Address of var[0] = 0xbfce42d0 Value of var[0] = 10 Address of var[1] = 0xbfce42d4 Value of var[1] = 100 Address of var[2] = 0xbfce42d8 Value of var[2] = 200