Pointer Arithmetics in C/C++
เวลาที่เราเราแสดงผลตัวแปรที่เป็น pointer ปรกติค่าที่พิมพ์ได้ก่อน dereference จะเป็นค่าตำแหน่งของตัวแปรที่มันชี้อยู่ เช่น
int i = 10; int *p = &i;
cout << p << endl;
ผลที่ได้จะคล้าย ๆ กะค่าข้างล่างนี้
ffbefa80
ทีนี้มีข้อสงสัยอยู่หนึ่งอย่างคือ ถ้าเราเอาเลขของ pointer 2 ตัวนี้มาลบกันในขณะที่เป็น pointer อยู่ หรือนำค่า pointer มาบวกกับตัวเลขจะเกิดอะไรขึ้น ขั้นแรกเรามาดูก่อนกะ operator + กับ pointer
int i = 10; int *p = &i; cout << p << endl; cout << p + 1 << endl;
ผลลัพธ์ที่ได้ไม่ใช่
ffbefa80 ffbefa81
นะครับแต่ผลที่ได้จะคล้าย ๆ กะค่าข้างล่างนี้
ffbefa80 ffbefa84
คือค่าที่เพิ่มขึ้นมาจะเป็น 1*sizeof(datatype) นั้น ๆ เช่นเดียวกันกับ operator - คือถ้าเอา address ของตัวแปรนั้น ๆ มาลบกันค่าที่ได้ก็ไม่ใช่ ค่าที่เป็น address มาลบกันเฉย ๆ แต่จะเป็น ค่าในลักษณะเดียวกันกับ operator +
มาดู Program ตัวอย่างกันดีกว่า
#include <iostream> #include <iomanip>
using namespace std;
int main() { int a; int b;
cout << "&a = " << setw(8) << setfill('0') << hex << &a << endl << "&b = " << setw(8) << setfill('0') << hex << &b << endl << "&a - &b = " << (&a - &b) << endl << endl; return 0; }
&a = ffbefa80 &b = ffbefa7c &a - &b = 1
Create Date : 21 ธันวาคม 2548 |
Last Update : 21 ธันวาคม 2548 22:13:03 น. |
|
0 comments
|
Counter : 390 Pageviews. |
|
|
|