فراخوانی با ارجاع در زبان C++
در این نوع فراخوانی یک کپی از مرجع (Reference) آرگومان به تابع ارسال می شود به این معنی که تابع دسترسی مستقیم به مقدار آن آرگومان دارد و هر تغییری که درون تابع اعمال شود بر روی مقدار اصلی نیز تاثیر می گذارد. برای آن که بتوان یک متغیر را به روش اجرا به یک تابع ارسال کرد، پارامتر آن تابع باید مانند مثال زیر تعریف شود. برای نمونه تابع swap() را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 | // function definition to swap the values. void swap(int &x, int &y) { int temp; temp = x; /* save the value at address x */ x = y; /* put y into x */ y = temp; /* put x into y */ return; } |
در مثال زیر قصد داریم از طریق فراخوانی با ارجاع (By Reference) مقدار متغیر a و b را با هم عوض کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> using namespace std; // function declaration void swap(int &x, int &y); int main () { // local variable declaration: int a = 100; int b = 200; cout << "Before swap, value of a :" << a << endl; cout << "Before swap, value of b :" << b << endl; /* calling a function to swap the values using variable reference.*/ swap(a, b); cout << "After swap, value of a :" << a << endl; cout << "After swap, value of b :" << b << endl; return 0; } // function definition to swap the values. void swap(int &x, int &y) { int temp; temp = x; /* save the value at address x */ x = y; /* put y into x */ y = temp; /* put x into y */ return; } |
زمانی که کد بالا توسط کامپایلر زبان C++ اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 | Before swap, value of a :100 Before swap, value of b :200 After swap, value of a :200 After swap, value of b :100 |
نتیجه کد بالا به خوبی نشان می دهد که بر خلاف فراخوانی با مقدار، در فراخوانی با ارجاع تغییرات اعمال شده درون تابع بر روی متغیرها تاثیر گذاشته است.
هیچ نظری ثبت نشده است