اعمال ریاضی بر روی اشاره گرها در زبان C++ – آموزش زبان C++

cpp pointer arithmetic 4411 اعمال ریاضی بر روی اشاره گرها در زبان C++   آموزش زبان C++

اعمال ریاضی بر روی اشاره گرها در زبان C++

اشاره گر در زبان C++ یک آدرس می باشد که این آدرس به صورت عددی است. بنابراین می توان عملیات ریاضی را بر روی آن انجام داد. چهار عملگر ریاضی وجود دارند که در هنگام استفاده از اشاره گرها می توانید از آن ها استفاده کنید: ++، –، + و -. برای درک بهتر موضوع اشاره گر ptr را در نظر بگیرید و فرض کنید که به آدرس ۱۰۰۰ در حافظه اشاره می کند. در زبان C++ می توانیم عملیات زیر را بر روی اشاره گر prt اعمال کنیم:

ptr++

زمانی که عملیات بالا انجام شود، اشاره گر ptr ما به آدرس ۱۰۰۴ اشاره می کند به این دلیل که از نوع integer می باشد و هر integer در حافظه ۴ بایت اشغال می کند. حال اگر این اشاره گر از نوع کاراکتر (char) بود، یک واحد به آدرس اضافه می شد (یعنی ۱۰۰۱) زیرا نوع داده کار ۱ بایت از حافظه را اشغال می کند.

افزایش اشاره گر

ما در برنامه های خود ترجیح می دهیم از اشاره گر به جای آرایه استفاده کنیم زیرا اشاره قابل تغییر و افزایش است اما آرایه به دلیل آن که یک اشاره گر ثابت است نمی تواند تغییر کند. برنامه زیر با افزایش مقدار اشاره گر به عنصر بعدی آرایه دسترسی پیدا می کند.

#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
   // let us have array address in pointer.
   ptr = var;
   for (int i = 0; i < MAX; i++) {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
      // point to the next location
      ptr++;
   }
   return 0;
}

امتحان کنید

زمانی که کد بالا توسط کامپایلر زبان C++ اجرا شود، نتیجه زیر را تولید خواهد کرد:

Address of var[0] = 0xbfa088b0
Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200

کاهش اشاره گر

روشی که برای افزایش اشاره گر استفاده می شود را می توان برای کاهش آن نیز استفاده کرد با این تفاوت که باید از عملگر کاهشی استفاده شود:

#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
   // let us have address of the last element in pointer.
   ptr = &var[MAX-1];
   for (int i = MAX; i > 0; i--) {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
      // point to the previous location
      ptr--;
   }
   return 0;
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود نتیجه زیر را تولید می کند:

Address of var[2] = bfedbcd8
Value of var[2] = 200
Address of var[1] = bfedbcd4
Value of var[1] = 100
Address of var[0] = bfedbcd0
Value of var[0] = 10

مقایسه اشاره گرها

اشاره گرها را می توان با استفاده از عملگرهای مقایسه ای مانند ==، < و > با یک دیگر مقایسه کرد. اگر p1 و  p2 به متغیرهای مرتبط اشاره کنند، بنابراین می توان آن دو را با هم مقایسه کرد. به مثال زیر که تغییر یافته مثال بالاست توجه کنید، آدرس اشاره گر هر بار که حلقه اجرا می شود یک واحد افزایش می یابد و تا زمانی که آدرس قرار گرفته در اشاره گر با آدرس آخرین عنصر آرایه برابر نباشد، اجرای حلقه ادامه پیدا می کند.

#include <iostream>
using namespace std;
const int MAX = 3;
int main () {
   int  var[MAX] = {10, 100, 200};
   int  *ptr;
   // let us have address of the first element in pointer.
   ptr = var;
   int i = 0;
   while ( ptr <= &var[MAX - 1] ) {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl;
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl;
      // point to the previous location
      ptr++;
      i++;
   }
   return 0;
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیرا تولید خواهد کرد:

Address of var[0] = 0xbfce42d0
Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200

نوشته اعمال ریاضی بر روی اشاره گرها در زبان C++ – آموزش زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *