بطوری که در گذشته بیان شد ، اگر متغیری آدرس متغیر دیگری را در خود نگه دارد آن را اشارهگر نامند . حال اگر متغیر دوم نیز از نوع اشارهگر باشد در این صورت متغیر اول یک اشارهگر به اشارهگر است .چنین موقعیتی را اشارهگر به اشارهگر نامند . گاهی ممکن است تصور و فهم اشارهگر به اشارهگر برای دانشجویان ایجاد اشکال کند . شکل زیر مفهوم اشارهگر به متغیر عادی و اشارهگر به اشارهگر را روشن میکند : نمایش اشارهگر به متغیر عادی و اشارهگر به اشارهگر 
همانطور که ملاحظه میکنید ، مقدار یک اشارهگر معمولی ، آدرس یک متغیر است اما در مورد اشارهگر به اشارهگر ، اولین اشارهگر آدرس اشارهگر دوم را دارد که آن هم به نوبة خود آدرس متغیر دیگری را در خود دارد . این روش میتواند (بهصورت تودرتو) تا هرچند بار که نیاز باشد ، تکرار گردد . اما در عمل کمتر به بیش از یک بار نیاز پیش میآید و داشتن تصور صحیح از آن نیز برای اغلب برنامهنویسان مشکل است . برای توصیف متغیرهایی از نوع اشارهگر به اشارهگر باید دو ستاره در جلوی آن قرار داد . برای مثال توصیف زیر به کامپایلر میگوید که متغیر z یک اشارهگر به اشارهگر از نوع float است : float **z ; به هرحال باید توجه داشته باشید که z یک اشارهگر به یک مقدار اعشار نیست ؛ بلکه یک اشارهگر به اشارهگری است که اشارهگر دوم میتواند آدرس متغیری از نوع float را داشته باشد . برای دستیابی به مقدار متغیر هدف که آدرس آن در اشارهگر دوم است ، باید اپراتور ستاره را دوباره بکار ببرید . مانند مثال زیر : # include <stdio.h> main ( ) { int x , *p , **q ; x = 10 ; p = &x ; q = &p ; printf ("%d" , **q) ; / * print the value of x */ } در این مثال ، p بهعنوان اشارهگر به یک متغیر int و q نیز بهعنوان اشارهگر به یک اشارهگری که میتواند آدرس متغیری از نوع int را داشته باشد ، توصیف شده است . حال نتیجه اجرای printf این خواهد شد که 10 (مقدار متغیر x) روی صفحه نمایش ، نشان داده شود . یادآوری - آرایهای از اشارهگرها ، نوعی از اشارهگر به اشارهگر است . باتوجه به مباحث این فصل میتوان نتایج زیر را در مورد اشارهگرها بیان کرد : 1 ـ دو عملگر یا اپراتور در مورد اشارهگرها مورد استفاده قرار میگیرند که عبارتند از : * و & . عملگر & یک عملگر یکانی است که آدرس عملوند یا اپراند خود را مشخص میکند . عملگر * نیز یک عملگر یکانی است که محتویات یک آدرس حافظه را مشخص میکند . بنابراین عملگر * مکمل عملگر & میباشد . 2 ـ اعمال متداول روی اشارهگرها عبارتند از : الف) عمل انتساب یا جایگذاری ب) اعمال محاسباتی که شامل : عمل جمع ، عمل تفریق ، عمل + + و عمل - - است . پ) مقایسه اشارهگرها 3 ـ اشارهگرها دارای ویژگیهای زیر میباشند : الف) عمل تخصیص حافظه بهصورت پویا را امکانپذیر میکنند . ب) کار با آرایهها و رشتهها را آسان میکنند . پ) موجب بهبود کارآیی بسیاری از توابع میگردند . ت) فراخوانی با آدرس را در مورد توابع امکانپذیر میسازند ؛ درنتیجه برگردان بیش از یک مقدار ، از یک تابع ، میسر میگردد . ث) ایجاد ساختارهای پیچیدهتر مثل لیستهای پیوندی ، درختهای دودویی ، گرافها و ... را به راحتی امکانپذیر میسازند . پایان
سلام بعد از 8 قسمت تدریس فشرده درس سی پلاس پلاس اونم قسمت اشاره گر ها واقعا جای خسته نباشید داره به همه اونایی که تا اینجا با ما همراه بودند . امتحانا هم که داره شروع میشه و انشاالله سربلند و پیروز بیرون بیایید. اونایی که قبول شدند خبرشا بعدش بدند..ما منتظر خبر خوش شما هستیم :: التماس دعا :: یا حق
|