ⓘ اشاره‌گر, علوم رایانه. در فرهنگ علوم رایانه متغیرهای از نوع اشاره‌گر ، به متغیرهایی گفته می‌شود که محتوای آن‌ها، آدرس خانه‌ای از حافظه یا نیل است. در عمل، اشاره ..

                                     

ⓘ اشاره‌گر (علوم رایانه)

در فرهنگ علوم رایانه متغیرهای از نوع اشاره‌گر ، به متغیرهایی گفته می‌شود که محتوای آن‌ها، آدرس خانه‌ای از حافظه یا نیل است. در عمل، اشاره‌گر متغیری است که به متغیر دیگری اشاره می‌کند.

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

                                     

1.1. اشاره‌گرها در زبان‌های برنامه‌نویسی مختلف زبان سی

در زبان سی اشاره‌گرها یکی از اجزای پایه زبان هستند و ارتباط اساسی با آرایه، ساختارها، و توابع دارند. چندین عملگر مختلف برای کار بر روی اشاره‌گرها وجود دارد که مهمترین آنها عملگرهای یکانی * و & هستند. عملگر & عملگر آدرس عملوند خود را برمی‌گردد. عملگر * عملگر در آدرس هم محتوای خانه‌ای که آدرس آن عملوندش قرار دارد را در دسترس می‌سازد. برای تعریف یک اشاره گر باید قبل از نام آن علامت * قرار گیرد.

در مثال بالا ip یک اشاره گر به عدد صحیح است، عبارت ip = &x آدرس متغیر x را در ip قرار می‌دهند. y = *ip هم محتوای آدرسی که در ip قرار دارد را به متغیر y منتسب می‌کند. به کمک اشاره گرها می‌توان از حافظه رایانه به صورت پویا استفاده کرد. بدین صورت که هر وقت احتیاج به حافظه داشتیم آن را به برنامه اختصاص می‌دهیم و هر وقت که کارمان تمام شد آن را به سیستم پس می‌دهیم. دو توابع کتابخانه‌ای به نام malloc و free برای انجام این کار وجود دارند. تابع malloc که بدین صورت اعلان شده:

به اندازه size بایت از سیستم فضا گرفته و اشاره گری به ابتدای این مکان را برمی‌گرداند. تابع free که بدین صورت اعلان شده:

حافظه ای که آدرس اولین بایت آن در ptr قرار دارد را به سیستم برمی‌گرداند.

                                     

1.2. اشاره‌گرها در زبان‌های برنامه‌نویسی مختلف اشاره گرها و فراخوانی توابع

در زبان سی، وقتی که متغیری را به عنوان آرگومان برای تابع ارسال می‌کنیم، در حقیقت مقدار آن متغیر در پارامتر تابع کپی می‌شود و کلیه عملیات بر روی آن کپی انجام می‌شود و متغیر اصلی بدون تغییر باقی می‌ماند. این کار به کمک یک پشته انجام می‌شود. برای اینکه تابع قادر باشد تا بر روی آرگومانها تغییر ایجاد کند، باید به جای مقدار، آدرس آرگومان را ارسال کنیم. چرا که به کمک آدرس تابع می‌تواند مستقیماً به سراغ حافظه رفته و محتوای آن را تغییر دهد. برای اینکه اشاره گری به تابع ارسال شود، پارامترهای تابع باید از نوع اشاره گر تعریف شوند. تابع زیر محتوای دو متغیر را با یکدیگر تعویض می‌کند.

                                     

1.3. اشاره‌گرها در زبان‌های برنامه‌نویسی مختلف اشاره گرها و آرایه‌ها

در زبان سی نام یک آرایه، اشاره گری به اولین عنصر آرایه است. برای دستیابی به بقیه عناصر آرایه، شماره اندیس آن خانه با آدرس اولین خانه جمع می‌شود. چون خانه‌های آرایه به صورت پشت سر هم در حافظه ذخیره می‌شوند

در مثال بالا ip = a مقدار a که اشاره گری به یک عدد صحیح است را به اشاره گر ip انتساب می‌دهد؛ بنابراین از این به بعد می‌توان از طریق اشاره گر ip هم به محتویات آرایه دسترسی داشت. ip = ۱۲ عدد ۱۲ را به دومین عنصر آرایه چون در سی اندیس آرایه‌ها از صفر شروع می‌شود انتساب می‌دهد.

در خط آخر، ابتدا ip که آدرس یک خانه را دربردارد و آدرس هم یک عدد است با ۲ جمع شده و سپس یک آدرس جدید به دست می‌آید که همان عنصر سوم آرایه است. سپس عدد ۶۷ در این آدرس قرار می‌گیرد.

                                     

1.4. اشاره‌گرها در زبان‌های برنامه‌نویسی مختلف اشاره گرها و توابع

همانند آرایه، نام یک تابع هم یک اشاره گر است. در زبان سی، نام یک تابع به ابتدای محلی از حافظه اشاره می‌کند که کدهای تابع در آنجا قرار دارند. در هنگام کار با اشاره‌گر به توابع بهتر است برای بالا بردن خوانایی از typedefها استفاده کنید.

اعلان بالا، نوع داده جدیدی به نام func_t تعریف می‌کند. این نوع داده یک اشاره گر به تابع است. اما فقط می‌تواند به توابعی اشاره کند که دو آرگومان از نوع ‎int* دریافت می‌کنند و هیچ چیزی برنمی‌گردانند. مانند تابع swap که قبلاً تعریف کردیم

دستور func_t exchg یک اشاره گر به تابع به نام exchg ایجاد می‌کند که exchg می‌تواند به توابعی که دو اشاره گر به عدد صحیح می‌گیرند و هیچ چیز برنمی‌گردانند اشاره کند. دستور exchg = &swap آدرس اشاره گر swap را در exchg قرار می‌دهد. حالا که آدرس تابع در اشاره گر exchg در دسترس است، می‌توان تابع را از طریق این اشاره گر فراخوانی کرد. اشاره گر به توابع را می‌توان به عنوان آرگومان به توابع دیگر ارسال کرد. همچنین می‌توان آنها را در آرایه ذخیره کرد. مثلاً در کتابخانه استاندارد سی تابعی به نام bsearch وجود دارد که عمل جستجوی دودویی را انجام می‌دهد. این تابع بدین شکل اعلان شده‌است:

پارامتر آخر این تابع، اشاره گر به تابعی است که یک عدد صحیح برمی‌گرداند دو آرگومان از نوع اشاره گر دریافت می‌کند. اشاره گرها از نوع void تعریف شده‌اند تا بتوانند به هر نوع داده‌ای اشاره کنند.

                                     

1.5. اشاره‌گرها در زبان‌های برنامه‌نویسی مختلف مشکلات اشاره گرها

اشاره گرهایی هنوز مقدار دهی نشده‌اند و به جایی اشاره نمی‌کنند می‌توانند برای برنامه خطرناک باشند. به مثال زیر توجه کنید:

اشاره گر x هنوز مقدار دهی نشده و به یک خانه تصادفی اشاره می‌کند؛ بنابراین دستور دوم سعی می‌کند عدد ۱۲ را در یک جای تصادفی از حافظه قرار دهد. اگر خوش شانش باشید، این خانه به جایی در خارج از محدوده آدرس دهی برنامه اشاره می‌کند. چون در این صورت سیستم‌عامل اجازه دسترسی به آن خانه را نداده و پیغام segmentation fault تولید می‌کند. اما اگر بد شانس باشید و آن خانه در محدوده آدرس دهی برنامه باشد، محتوای یکی از ساختمان داده برنامه خود را بازنویسی کرده‌اید. اطلاعات آسیب خواهند دید.

                                     
  • اشاره گر ممکن است به یکی از موارد زیر اشاره داشته باشد: اشاره گر علوم رایانه اشاره گر واسط نگاره ای کاربر
  • مانند حافظه رایانه ذخیره شده است. به همین دلیل معمولا ارجاع ها اشاره گر یا آدرس هم نامیده می شود و می گوییم آن ها به یک قلم داده اشاره می کنند. با
  • در علوم رایانه گره به انگلیسی: Node رکوردی است که از یک فیلد داده و همچنین از یک یا چند فیلد که پیوندی به دیگر گره ها هستند تشکیل می شود. فیلدهای
  • در علوم رایانه یک منبع یا منبع سیستمی به هر جزء فیزیکی یا مجازی با محدودیت دسترسی در یک سیستم رایانه ای اطلاق میگردد. بنابراین هر قطعه متصل به یک رایانه
  • ریاضی فرض می شدند. تاریخچه رایانه نیز به همین موضوع استوار است. اولین رایانه دستگاه محاسبه چرتکه نام دارد. چرتکه رایانه ای بود که انسان ها در گذشته
  • سخت افزار رایانه به انگلیسی: Computer Hardware اجزاء فیزیکی قابل لمس رایانه که از اجزاء الکترونیکی یا الکترومکانیکی تشکیل شده باشد. سخت افزار رایانه در واقع
  • در علوم رایانه توصیف گر پرونده معمولا یک عدد صحیح است که برای اشاره به یک پرونده بازشده به کار می رود. توابع رایجی که از توصیف گر پرونده استفاده می کنند
  • آنتیکیترا و خط کش محاسبه نیز رایانه خوانده می شدند. در برخی موارد از آن ها به عنوان رایانه قیاسی نام برده می شود. بعدها رایانه های دیجیتال الکترونیک پدیدار
  • شود اما بدون استفاده از اشاره گر به توابع عضو چرا که اشاره گر به تابع عضو با اشاره گر به تابع متفاوت است. به جای آن اشاره گر به توابع ایستا می تواند
  • در علوم رایانه به هر وسیله که توانایی نگهداری اطلاعات را داشته باشد حافظه می گویند. حافظه یکی از قسمت های ضروری و اساسی یک رایانه به شمار می رود. همان طور
  • علوم اجتماعی دسته ای از تخصص های آکادمیک است که مرتبط است با اجتماع و روابط بین افراد آن در جامعه. علوم اجتماعی به عنوان یک کل شاخه های متعددی دارد
  • بیان شود. در سال های و با کمک رایانه تحول عمیقی در پویانمایی آغاز شد. در سال های تأثیرات رایانه بر پویانمایی ها به اوج خود رسید تا بالاخره