فراخوانی با اشاره گر در زبان C++
در فراخوانی با اشاره گر در زبان C++ یک کپی از آدرس آرگومان به تابع ارسال می شود به این معنی که تابع دسترسی مستقیم به مقدار آن آرگومان دارد و هر تغییری که درون تابع اعمال شود بر روی مقدار اصلی نیز تاثیر می گذارد. برای آن که بتوان یک متغیر را به روش اجرا به یک تابع ارسال کرد، پارامتر آن تابع باید به صورت اشاره گر تعریف شود. برای نمونه تابع swap() را در نظر بگیرید:
1 2 3 4 5 6 7 8 | // 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 Pointer) مقدار متغیر 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 25 26 27 | #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. * &a indicates pointer to a ie. address of variable a and * &b indicates pointer to b ie. address of variable b. */ 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 |
نتیجه کد بالا به خوبی نشان می دهد که بر خلاف فراخوانی با مقدار، در فراخوانی با اشاره گر تغییرات اعمال شده درون تابع بر روی متغیرها تاثیر گذاشته است.
هیچ نظری ثبت نشده است