اردیبهشت ۶, ۱۳۹۸ Mostafa بدون دیدگاه

اگر دنبال برنامه نویس برای ساخت افزونه ،قالب،سایت،برنامه ویندوز،اپلیکیشین اندروید،ربات تلگرام و.... هستید ،سفارش برنامه نویسی را مطالعه نمایید.

توجه : درخواست افزونه ،قالب، اسکریپت و نرم افزار و ... و سوالات و مشکلات خود را در انجمن ارسال نمایید

دو روش برای انتقال اطلاعات به تابع در زبان C وجود دارد، به عنوان مثال، با فراخوانی با مقدار و فراخوانی با مرجع.
 

با صدازدن تابع با مقدار در 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   
}
صدازدن با مرجع در C

در صدا زدن با مرجع، آدرس متغیر به فراخوانی تابع به عنوان پارامتر واقعی منتقل می شود.
ارزش پارامترهای واقعی را می توان با تغییر پارامترهای رسمی از آنجا که آدرس پارامترهای واقعی منتقل می شود.
در صدا زدن با مرجع، تخصیص حافظه برای هر دو پارامتر رسمی و پارامترهای واقعی مشابه است. تمام عملیات در عملکرد بر روی مقدار ذخیره شده در آدرس پارامترهای واقعی انجام می شود و مقدار اصلاح شده در همان آدرس ذخیره می شود.

مثال

#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   
}

 

 

 

 


برچسب ها
نظرات

توجه : لطفاً فقط نظرات خود را از این طریق ارسال نمایید و سوالات و مشکلات خود را در انجمن سایت مطرح نمایید.