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 ตัวอย่างกันดีกว่า
&a = ffbefa80
&b = ffbefa7c
&a - &b = 1
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