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