Just Like That .. (^-^)v

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.  

ชื่อ :
Comment :
  *ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิกช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก
 

Forsberg
Location :
กรุงเทพ Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed

ผู้ติดตามบล็อก : 1 คน [?]




[Add Forsberg's blog to your web]