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


در این مقاله در مورد روش ارسال اشارهگرها به یک تابع به عنوان آرگومان صحبت میکنیم و شیوه استفاده مؤثر از آنها را در برنامههای ++C مورد بررسی قرار میدهیم. بدین ترتیب با روش فراخوانی با ارجاع در ++C آشنا خواهید شد. برای مطالعه بخش قبلی این سری مطالب روی لینک زیر کلیک کنید:
در بخشهای قبلی این سری مطالب آموزشی در مقالهای با عنوان «تابعهای ++C — به زبان ساده» در مورد روش ارسال آرگومانها به یک تابع صحبت کردیم. این روش به نام فراخوانیِ با مقدار نامیده میشود، زیرا در آن مقدار واقعی به تابع ارسال میشود. با این حال روش دیگری نیز برای ارسال آرگومانها به تابع وجود دارد که در آن مقدار واقعی آرگومان ارسال نمیشود، بلکه به جای آن تنها ارجاعی به آن مقدار ارسال خواهد شد.
مثال 1: ارسال با ارجاع بدون اشارهگر
کدهای مربوطه را در ادامه آوردهایم.
خروجی
Before swapping a = 1 b = 2 After swapping a = 2 b = 1
در تابع ()main دو مقدار صحیح به نامهای a و b تعریف کردهایم. این مقادیر صحیح به تابع ()swap به صورت با ارجاع ارسال میشوند. کامپایلر میتواند تشخیص دهد که این مقادیر به صورت با ارجاع ارسال شدهاند، زیرا تعریف تابع به صورت زیر است:
علامت & پس از نوع داده نشاندهنده ارجاعی بودن آن است. تنها ارجاع (آدرس) متغیرهای a و b در تابع swap() دریافت میشوند و تعویض مقادیر در آدرس اصلی متغیرها صورت میگیرد. در تابع ()swap، مقادیر n1 و n2 آرگومانهای صوری هستند که در عمل به ترتیب برابر با a و b هستند. روش دیگری برای اجرای این کار با استفاده از اشارهگرها نیز وجود دارد:
مثال 2: ارسال با ارجاع با استفاده از اشارهگرها
خروجی مثال فوق همانند مثال قبلی است. در این حالت، آدرس متغیر در طی فراخوانی تابع به جای خود متغیر ارسال میشود.
از آنجا که آدرس به جای مقدار ارسال شده است، عملگر «ارجاعزدایی» (dereference) باید برای دسترسی به مقدار ذخیره شده در آن آدرس مورد استفاده قرار گیرد:
n1* و n2* به ترتیب مقدارهای ذخیره شده در آدرسهای n1 و n2 را به دست میدهند. از آنجا که n1 شامل آدرس a است، هر تغییری که روی n1* اجرا شود، مقدار a در تابع ()main نیز تغییر مییابد. به این ترتیب به پایان این بخش از سری مطالب آموزش جامع ++C میرسیم.
برای مطالعه بخش بعدی این سری مقالات روی لینک زیر کلیک کنید:
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش اشارهگر در برنامهنویسی پیشرفته ++C
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش ++C — راهنمای شروع یادگیری
- تابع های ++C — به زبان ساده
==
سلام مهندس جان خداقوت
تفاوت دو روش فراخوانی با ارجاع بدون اشاره گر و با اشاره گر چی هست؟ اگه ممکنه بیشتر توضیح بدین تا مطلب جا بیفته..
سلام و وقت بخیر دوست عزیز؛
برای آشنایی با روشهای مختلف فراخوانیهای تابع پیشنهاد میکنم مطلب زیر را مطالعه کنید:
ارسال متغیرها به روش با مقدار و با ارجاع در جاوا اسکریپت — به زبان ساده
از توجه شما سپاسگزاریم.