Sunday, October 09, 2005

address ใน C/C++ กับ +, - operator

เวลาที่เราเราแสดงผลตัวแปรที่เป็น 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

0 Comments:

Post a Comment

<< Home