码迷,mamicode.com
首页 > 其他好文 > 详细

参数中的值传递和地址传递

时间:2020-04-07 12:28:22      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:传递   src   图片   image   span   变量   swa   idt   printf   

函数参数中的值传递:

void my_swap(int m,int n)

{
    int tmp = 0;
    
    tmp = m;m = n;n = tmp;

    printf("m = %d,n = %d\n",m,n) ;   
    
}

int main()

{
    int a = 11,b = 22;

    my_swap(a,b);

   printf("a = %d,b = %d\n",a,b);        
}

在这段代码中,我想实现的效果是交换a和b的值,即, a = 22,b = 11 ,但是打印结果是 m = 22,n = 11    a = 11,b = 22 ,这是因为在 my_swap() 中参数是以值传递的方式传入的,也就是说, my_swap(a,b); 代表的只是将a的值复制给m,将b的值复制给n,并没有告诉函数变量a和b的地址,所以实际上该函数并没有对变量a和b进行任何操作。

技术图片

但是如果将函数的参数改为 my_swap(int *m,int *n) ,因为形参是指针所以实参也要相应的进行变换 my_swap(&a,&b); 这样一来函数内部实现就应该变成对指针的操作:

void my_swap(int *m ,int *n)

{
     int tmp = 0;

     tmp = *m;//将m指向的变量的值赋值给tmp

     *m = *n;//将n指向的变量的值给了m指向的变量

     *n = tmp;//将tmp的值给了n指向的变量

}   

这时指针m持有变量a的地址,指针n持有变量b的地址,在函数内部通过指针对变量a和b的值进行了交换,最终打印出来的结果是 a = 22,b = 11 (交换了a和b的值)。

技术图片

参数中的值传递和地址传递

标签:传递   src   图片   image   span   变量   swa   idt   printf   

原文地址:https://www.cnblogs.com/haystack/p/12652478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!