اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.
توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید
با صدازدن تابع با مقدار در C
در روش call-by value، مقدار پارامترهای واقعی به پارامترهای رسمی کپی می شود. به عبارت دیگر می توان گفت که مقدار متغیر در فراخوانی تابع در فراخوانی به وسیله روش مقدار استفاده می شود.
در روش call-by value، ما نمی توانیم مقدار پارامتر واقعی را با پارامتر رسمی تغییر دهیم.
در فراخوانی توسط مقدار، حافظه مختلف برای پارامترهای واقعی و رسمی اختصاص داده می شود از آنجا که مقدار پارامتر واقعی به پارامتر رسمی کپی می شود.
پارامتر واقعی آرگومان است که در فراخوانی تابع مورد استفاده قرار می گیرد، در حالی که پارامتر رسمی آرگومان است که در تعریف تابع مورد استفاده قرار می گیرد.
بیایید سعی کنیم مفهوم فراخوانی را با مقدار در زبان c با مثال زیر روشن کنیم :
#include<stdio.h> void change(int num) { printf("Before adding value inside function num=%d \n",num); num=num+100; printf("After adding value inside function num=%d \n", num); } int main() { int x=100; printf("Before function call x=%d \n", x); change(x);//passing value in function printf("After function call x=%d \n", x); return 0; }
مثال دیگر :
#include <stdio.h> void swap(int , int); //prototype of the function int main() { int a = 10; int b = 20; printf("Before swapping the values in main a = %d, b = %d\n",a,b); // printing the value of a and b in main swap(a,b); printf("After swapping values in main a = %d, b = %d\n",a,b); // The value of actual parameters do not change by changing the formal parameters in call by value, a = 10, b = 20 } void swap (int a, int b) { int temp; temp = a; a=b; b=temp; printf("After swapping values in function a = %d, b = %d\n",a,b); // Formal parameters, a = 20, b = 10 }
در صدا زدن با مرجع، آدرس متغیر به فراخوانی تابع به عنوان پارامتر واقعی منتقل می شود.
ارزش پارامترهای واقعی را می توان با تغییر پارامترهای رسمی از آنجا که آدرس پارامترهای واقعی منتقل می شود.
در صدا زدن با مرجع، تخصیص حافظه برای هر دو پارامتر رسمی و پارامترهای واقعی مشابه است. تمام عملیات در عملکرد بر روی مقدار ذخیره شده در آدرس پارامترهای واقعی انجام می شود و مقدار اصلاح شده در همان آدرس ذخیره می شود.
مثال
#include<stdio.h> void change(int *num) { printf("Before adding value inside function num=%d \n",*num); (*num) += 100; printf("After adding value inside function num=%d \n", *num); } int main() { int x=100; printf("Before function call x=%d \n", x); change(&x);//passing reference in function printf("After function call x=%d \n", x); return 0; }
مثال دیگر :
#include <stdio.h> void swap(int *, int *); //prototype of the function int main() { int a = 10; int b = 20; printf("Before swapping the values in main a = %d, b = %d\n",a,b); // printing the value of a and b in main swap(&a,&b); printf("After swapping values in main a = %d, b = %d\n",a,b); // The values of actual parameters do change in call by reference, a = 10, b = 20 } void swap (int *a, int *b) { int temp; temp = *a; *a=*b; *b=temp; printf("After swapping values in function a = %d, b = %d\n",*a,*b); // Formal parameters, a = 20, b = 10 }