حالا می ریم سراغ کاربرد اشاره گرها در برنامه نویسی. مطمئنا کاربرد اشاره گرها مربوط به مثال بالا نمی شه! چون براحتی می تونستیم بنویسم c = a و اصلا نیازی به اشاره گر نبود. یکی از کاربردهای اشاره گر مربوط می شه به انتقال داده ها بین توابع مختلف در برنامه. متغیرهایی که در حالت عادی به تابع ارسال می شن (به عنوان پارامتر) از تغییر پیدا کردن توسط تابع مصون هستن. چرا که تابع یه کپی از اونها رو استفاده می کنه. مثلا:
کد:
void func ( int n )
{
n++ ;
}
void main ( )
{
int n = 10 ;
func ( n ) ;
cout << n ;
}
مقدار n تابع func یه واحد افزایش پیدا می کنه ، اما این تغییر تاثیری در n تابع اصلی نداره. پس عدد 10 توسط cout به خروجی ارسال می شه. اما مواقعی هست که ما نیاز داریم بتونیم مقدار متغیر رو تغییر بدیم. مثل تابعی که دو متغیر رو دریافت می کنه و مقدارهاشون رو با هم عوض می کنه. اینجا اشاره گر به کمک ما می یاد:
کد:
void swap ( int *a , int *b )
{
int t ;
t = *a ;
*a = *b ;
*b = t ;
}
void main()
{
int m = 15 , n = 10 ;
swap ( &m , &n );
cout << "m = " << m << " , n = " << n ;
}
به جای محتویات متغیرهای m و n آدرس حافظه اونها به تابع ارسال می شه. پس اشاره گر a به m و اشاره گر b به n اشاره می کنن. حالا به مراحل مختلف تابع swap توجه کنید:
خط دوم : محتوای محلی که a به اون اشاره داره (یعنی مقدار m) در t قرار می گیره. پس t = 15.
خط سوم : محتوای محلی که b به اون اشاره داره (یعنی مقدار n) به محلی که a به اون اشاره داره (یعنی m) منصوب می شه. پس m = 10.
خط چهارم : محتوای t به محلی که b به اون اشاره داره (یعنی n) منصوب می شه. پس n = 15.
بعد از اینکه کنترل به تابع اصلی برمی گرده مقادیر m و n با هم عوض شدن! و خروجی به این صورته: