در این مقاله در مورد روش ارسال اشارهگرها به یک تابع به عنوان آرگومان صحبت میکنیم و شیوه استفاده مؤثر از آنها را در برنامههای ++C مورد بررسی قرار میدهیم. بدین ترتیب با روش فراخوانی با ارجاع در ++C آشنا خواهید شد. برای مطالعه بخش قبلی این سری مطالب روی لینک زیر کلیک کنید:
در بخشهای قبلی این سری مطالب آموزشی در مقالهای با عنوان «تابعهای ++C — به زبان ساده» در مورد روش ارسال آرگومانها به یک تابع صحبت کردیم. این روش به نام فراخوانیِ با مقدار نامیده میشود، زیرا در آن مقدار واقعی به تابع ارسال میشود. با این حال روش دیگری نیز برای ارسال آرگومانها به تابع وجود دارد که در آن مقدار واقعی آرگومان ارسال نمیشود، بلکه به جای آن تنها ارجاعی به آن مقدار ارسال خواهد شد.
مثال 1: ارسال با ارجاع بدون اشارهگر
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> using namespace std; // Function prototype void swap(int&, int&); int main() { int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "\nAfter swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int& n1, int& n2) { int temp; temp = n1; n1 = n2; n2 = temp; } |
1 2 3 4 5 6 7 |
Before swapping a = 1 b = 2 After swapping a = 2 b = 1 |

در تابع ()main دو مقدار صحیح به نامهای a و b تعریف کردهایم. این مقادیر صحیح به تابع ()swap به صورت با ارجاع ارسال میشوند. کامپایلر میتواند تشخیص دهد که این مقادیر به صورت با ارجاع ارسال شدهاند، زیرا تعریف تابع به صورت زیر است:
1 |
void swap(int& n1, int& n2) |
علامت & پس از نوع داده نشاندهنده ارجاعی بودن آن است. تنها ارجاع (آدرس) متغیرهای a و b در تابع swap() دریافت میشوند و تعویض مقادیر در آدرس اصلی متغیرها صورت میگیرد. در تابع ()swap، مقادیر n1 و n2 آرگومانهای صوری هستند که در عمل به ترتیب برابر با a و b هستند. روش دیگری برای اجرای این کار با استفاده از اشارهگرها نیز وجود دارد:
مثال 2: ارسال با ارجاع با استفاده از اشارهگرها
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> using namespace std; // Function prototype void swap(int*, int*); int main() { int a = 1, b = 2; cout << "Before swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(&a, &b); cout << "\nAfter swapping" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; } |
1 |
swap(&a, &b); // &a is address of a and &b is address of b |
1 2 3 |
void swap(int* n1, int* n2) { ... .. ... } |
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی
- آموزش اشارهگر در برنامهنویسی پیشرفته ++C
- مجموعه آموزشهای دروس علوم و مهندسی کامپیوتر
- آموزش ++C — راهنمای شروع یادگیری
- تابع های ++C — به زبان ساده
==