ในส่วนนี้เราจะมาดูกันว่าอะไรคือความแตกต่างระหว่าง *ptr++, *++ptr และ ++*ptr ใน C++
ที่นี่เราจะเห็นลำดับความสำคัญของ postfix++ และ prefix++ ใน C หรือ C++ ลำดับความสำคัญของคำนำหน้า ++ หรือ -- มีลำดับความสำคัญสูงกว่าตัวดำเนินการ dereference '*' และ postfix ++ หรือ -- มีลำดับความสำคัญสูงกว่าทั้งคำนำหน้า ++ และตัวดำเนินการ dereference '*'
เมื่อ ptr เป็นตัวชี้ ดังนั้น *ptr++ จะระบุ *(ptr++) และ ++*prt อ้างอิง ++(*ptr)
โค้ดตัวอย่าง
#include<iostream> using namespace std; int main() { char arr[] = "Hello World"; char *ptr = arr; ++*ptr; cout << *ptr; return 0; }
ผลลัพธ์
I
ดังนั้นในตอนแรก ptr จึงชี้ 'H' หลังจากใช้ ++*ptr จะเพิ่ม H ขึ้น 1 และตอนนี้ค่าคือ 'I'
โค้ดตัวอย่าง (C++)
#include<iostream> using namespace std; int main() { char arr[] = "Hello World"; char *ptr = arr; *ptr++; cout << *ptr; return 0; }
ผลลัพธ์
e
ดังนั้นในตอนแรก ptr จึงชี้ 'H' หลังจากใช้ *ptr++ จะเพิ่มตัวชี้ ดังนั้น ptr จะชี้ไปที่องค์ประกอบถัดไป ผลลัพธ์คือ 'e'
โค้ดตัวอย่าง (C++)
#include<iostream> using namespace std; int main() { char arr[] = "Hello World"; char *ptr = arr; *++ptr; cout << *ptr; return 0; }
ผลลัพธ์
e
ในตัวอย่างนี้ เรากำลังเพิ่ม ptr โดยใช้ ++ โดยที่ลำดับความสำคัญของการเพิ่มล่วงหน้า ++ จะสูงกว่า จากนั้นจะเพิ่มตัวชี้ก่อน จากนั้นจึงรับค่าโดยใช้ * มันเลยพิมพ์ 'e'