اشاره گرها
اشاره گرها بخش قدرتمند و دشوار C و ++C هستند. اکثر مبتدیان در درک مناسب اشاره گرها مشکل دارند. متغیرهای استاندارد برچسب هایی هستند که برای تعیین بخش هائی از حافظه کنار گذاشته می شوند تا داده از نوع خاصی را ذخیره کنند درحاليکه یک اشاره گر به بخش هایی از حافظه که توسط متغیر دیگری اشغال شده اشاره می کند. یک متغیر استاندارد یک مقدار را ذخیره می کند اما یک اشاره گر آدرس محلی در حافظه را ذخیره می کند.
یک متغير اشاره گر (pointer variable) متغیری است که حاوی آدرس داده ، متغیر دیگر يا تابع است. برای ذخیره آدرس اولین مرحله اعلان متغیر اشاره گر است. اعلان متغير اشاره گر تقریبا مشابه متغيرهای ديگر است تنها باید قبل از نام متغیر علامت ستاره (*) برای نشان داده اینکه یک اشاره گر است اضافه شود. هنگام تعريف اشاره گر نوع داده ای که به آن اشاره می کند باید مشخص شود. اعلان اشاره گر از فرم کلی زیر تبعیت می کند:
typename *ptrname;
typename نوع داده است که اشاره گر به آن اشاره می کند. علامت (*) عملگری است که بیان می کند متغیر اشاره گری به داده ای از نوع typename است. اشاره گر می تواند همراه با متغیر های غیراشاره گری هم اعلان شود.
مثال. متغیر ptr اشاره گری به یک داده صحیح است.
int *ptr;
int* ptr;
مثال. در اعلان زیر age از نوع صحيح و ptr اشاره گری به داده صحيح است.
int *ptr, age;
بعد از اعلان متغیر اشاره گر باید آنرا به جائی اشاره داد يعنی آدرس مکانی از حافظه که حاوی داده مورد نظر است را به اشاره گر اختصاص داد. اگر یک اشاره گر فقط اعلان شود و مقداردهی نشود ممکن است به محل دلخواهی از حافظه اشاره کند و استفاده از آن بدون توجه به اين مسئله می تواند مشکلات مهمی روی سیستم تولید کند. یک تکنیک کلی مقداردهی اشاره گر با مقدار NULL يا صفر است.
راه ديگر برای مقداردهی اشاره گر ذخیره آدرس متغیر دیگر در آن است. وقتی برنامه ای اجرا می شود کلیه اجزای آن در حافظه قرار می گیرد. بنابراین هر جز از برنامه از جمله متغیرها دارای آدرس هستند. عملگر & (address-of operator) آدرس این اجزا را می دهد. عملگر & آدرس عملوند خود را برمی گرداند که می توان این آدرس را درون یک متغیر اشاره گر ذخیره کرد.
مقداردهی یک اشاره گر می تواند فرم کلی زیر را داشته باشد:
pointer = &variable;
مثال. دستور زیر آدرس متغیر age را به اشاره گر ptr اختصاص می دهد.
ptr = &age;
روزی که به دنیای مجازی اومدم فرش قرمزی پهن بود وهزاران هزار کاربر کلاه خود را به احترام من برداشته بودن واز آنجایی که می دانستند شخص شخیصی مثل من به زودی پله های ترقی را یک به یک طی خواهدکشید، کلاه های خود را تکان می دادند و سوت می زدند و کف.