const و اشاره گرها

   همانطور که می دانيد const به برنامه نويس اين امکان را می دهد که مقدار يک متغير را که از نوع const تعريف شده است ، در طول برنامه نتوان تغيير داد . داده هايی که توسط اشاره گرها به توابع ارسال می شوند ، داخل تابع قابل تغيير می باشند و ممکن است نا خواسته تغيير يابند . برای جلوگيری از تغييرات نا خواسته ، آنها را به صورت ثابت به تابع ارسال می کنيم . به برنامه زير توجه کنيد :

void f( const int * ); // prototype
 
int main()
{
  int y;
 
  f( &y ); // f attempts illegal modification
 
  return 0;
}
 
// xPtr cannot modify the value of the variable 
// to which it points
void f( const int *xPtr )
{
  *xPtr = 100; // error: cannot modify a const object
}

   برنامه فوق هنگام کامپايل شدن پيغام خطايی مبنی بر اينکه داده ثابت قابل تغيير نمی باشد را خواهد داد .

Compiling CONSTP1.CPP:
Error CONSTP1.CPP 16: Cannot modify a const object
 

   همانطور که مشاهده می کنيد برای ارسال آرگومان توسط اشاره گر به صورت ثابت به تابع از دستور const int *xptr استفاده کرديم . و در تابع هنگام تغيير مقدار اشاره گر ثابت با پيغام خطا مواجه شديم .

   يکی ديگر از کاربردهای const همراه اشاره گرها ، ايجاد اشاره گر ثابتی به داده ای غير ثابت می باشد . چنين اشاره گری همواره به يک خانه حافظه اشاره می کند و نمی توان آن را به خانه حافظه ديگری اشاره داد ولی می توان داده داخل همان خانه حافظه را تغيير داد . به برنامه زير توجه کنيد :

int main()
{
  int x, y;
 
  // ptr is a constant pointer to an integer that can
  // be modified through ptr, but ptr always points 
  // to the same memory location.
  int * const ptr = &x; 
 
  *ptr = 7; // allowed: *ptr is not const
  ptr = &y; // error: ptr is const; 
            //        cannot assign new address
 
  return 0;
}

   برنامه فوق هنگام کامپايل شدن پيغام خطايی می دهد ، مبنی بر اينکه به اشاره گر ثابت آدرس جديدی را نمی توان نسبت داد .

Compiling CONSTP2.CPP:
Error CONSTP2.CPP 11: Cannot modify a const object

   در برنامه فوق توسط دستور int * const ptr=&x; اشاره گر ptr به آدرس متغير x اشاره خواهد کرد و چون از نوع ثابت تعريف شده است نمی تواند به آدرس ديگری اشاره کند اما مقداری را که ptr به آن اشاره می کند قابل تغيير است لذا با اجرای دستور ptr=7* خطايی رخ نمی دهد و مقدار متغير x برابر 7 می شود ولی با اجرای دستور ptr=&y می خواهيم اشاره گر به متغير y اشاره کند و از آنجايی که ptr تنها بايد به x اشاره کند با پيغام خطا مواجه می شويم .

   کاربرد ديگری از const همراه اشاره گرها ، ايجاد اشاره گر ثابتی به داده ای ثابت می باشد . چنين اشاره گری همواره به يک خانه حافظه اشاره می کند و از طريق اين اشاره گر نيز نمی توان داده داخل آن خانه حافظه را تغيير داد . به برنامه زير توجه کنيد :

#include <iostream.h>
 
int main()
{
  int x = 5, y;
 
  // ptr is a constant pointer to a constant integer. 
  // ptr always points to the same location; 
  // the integer at that location cannot be modified.
  const int *const ptr = &x; 
 
  cout << *ptr << endl;
 
  *ptr = 7; // error: *ptr is const; 
            //        cannot assign new value
  ptr = &y; // error: ptr is const;
            //        cannot assign new address
 
  return 0;
}

   هنگام کاپايل کردن برنامه فوق با پيغام خطايی مبنی بر اينکه مقدار اشاره گر و آدرس اشاره گر را نمی توان تغيير داد ، مواجه می شويم .

Compiling CONSTP3.CPP:
Error CONSTP3.CPP 14: Cannot modify a const object
Error CONSTP3.CPP 16: Cannot modify a const object

    در برنامه فوق توسط دستور const int * const ptr = &x; آدرس و مقدار اشاره گر ptr از نوع ثابت تعريف شده لذا هنگام تغيير مقدار خانه ای از حافظه که ptr به آن اشاره می کند توسط دستور *ptr = 7; با پيغام خطا مواجه می شويم و نيز هنگام تغيير آدرسی که ptr با آن اشاره می کند توسط دستور ptr = &y; پيغام خطای ديگری دريافت می کنيم .

 

 

   معرفی کامپيوتروبرنامه نويسی

   ساختارهای کنترلی

   توابع

   آرايه ها

   اشاره گر ها و رشته ها

   کلاسها

   گرانبار کردن عملگر ها

 
 
 
   
 
 
 

حق کپی رایت محفوظ می باشد