فراخوانی با ارجاع (Call By Reference) در زبان C
در فراخوانی با ارجاع (Call By Reference) یک کپی از آدرس آرگومان به تابع ارسال می شود به این معنی که تابع دسترسی مستقیم به مقدار آن آرگومان دارد و هر تغییری که درون تابع اعمال شود بر روی مقدار اصلی نیز تاثیر می گذارد. برای آن که بتوان یک متغیر را به روش اجرا به یک تابع ارسال کرد، پارامتر آن تابع باید به صورت اشاره گر تعریف شود. برای نمونه تابع 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 temp 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 | #include <stdio.h> /* function declaration */ void swap(int *x, int *y); int main () { /* local variable definition */ int a = 100; int b = 200; printf("Before swap, value of a : %dn", a ); printf("Before swap, value of b : %dn", b ); /* 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); printf("After swap, value of a : %dn", a ); printf("After swap, value of b : %dn", b ); return 0; } |
زمانی که کد بالا توسط کامپایلر زبان 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 |
نتیجه کد بالا به خوبی نشان می دهد که بر خلاف فراخوانی با مقدار، در فراخوانی با ارجاع تغییرات اعمال شده درون تابع بر روی متغیرها تاثیر گذاشته است.
هیچ نظری ثبت نشده است