برنامه نویسی 23 بازدید

در این مقاله در مورد روش ارسال اشاره‌گرها به یک تابع به عنوان آرگومان صحبت می‌کنیم و شیوه استفاده مؤثر از آن‌ها را در برنامه‌های ++C مورد بررسی قرار می‌دهیم. بدین ترتیب با روش فراخوانی با ارجاع در ++C آشنا خواهید شد. برای مطالعه بخش قبلی این سری مطالب روی لینک زیر کلیک کنید:

در بخش‌های قبلی این سری مطالب آموزشی در مقاله‌ای با عنوان «تابع‌های ++C — به زبان ساده» در مورد روش ارسال آرگومان‌ها به یک تابع صحبت کردیم. این روش به نام فراخوانیِ با مقدار نامیده می‌شود، زیرا در آن مقدار واقعی به تابع ارسال می‌شود. با این حال روش دیگری نیز برای ارسال آرگومان‌ها به تابع وجود دارد که در آن مقدار واقعی آرگومان ارسال نمی‌شود، بلکه به جای آن تنها ارجاعی به آن مقدار ارسال خواهد شد.

مثال ۱: ارسال با ارجاع بدون اشاره‌گر

خروجی

Before swapping
a = 1
b = 2

After swapping
a = 2
b = 1

فراخوانی با ارجاع در ++C

در تابع ()main دو مقدار صحیح به نام‌های a و b تعریف کرده‌ایم. این مقادیر صحیح به تابع ()swap به صورت با ارجاع ارسال می‌شوند. کامپایلر می‌تواند تشخیص دهد که این مقادیر به صورت با ارجاع ارسال شده‌اند، زیرا تعریف تابع به صورت زیر است:

علامت & پس از نوع داده نشان‌دهنده ارجاعی بودن آن است. تنها ارجاع (آدرس) متغیرهای a و b در تابع swap()‎ دریافت می‌شوند و تعویض مقادیر در آدرس اصلی متغیرها صورت می‌گیرد. در تابع ()swap‎، مقادیر n1 و n2 آرگومان‌های صوری هستند که در عمل به ترتیب برابر با a و b هستند. روش دیگری برای اجرای این کار با استفاده از اشاره‌گرها نیز وجود دارد:

مثال ۲: ارسال با ارجاع با استفاده از اشاره‌گرها

خروجی مثال فوق همانند مثال قبلی است. در این حالت، آدرس متغیر در طی فراخوانی تابع به جای خود متغیر ارسال می‌شود.
از آنجا که آدرس به جای مقدار ارسال شده است، عملگر «ارجاع‌زدایی» (dereference) باید برای دسترسی به مقدار ذخیره شده در آن آدرس مورد استفاده قرار گیرد:
n1* و n2* به ترتیب مقدارهای ذخیره شده در آدرس‌های n1 و n2 را به دست می‌دهند. از آنجا که n1 شامل آدرس a است، هر تغییری که روی n1* اجرا شود، مقدار a در تابع ()main نیز تغییر می‌یابد. به این ترتیب به پایان این بخش از سری مطالب آموزش جامع ++C می‌رسیم.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

telegram
twitter

میثم لطفی

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

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *