menu Littleor's Blog
search
close
C语言基础-函数传参
127 浏览 | 0 评论

函数传参

在开发过程中,为了加强可读性,一般会使用函数封装代码.而在函数的使用中,会出现函数传参的情况.
而这个时候就会出现一点问题了!

函数传参的类型

函数传参只有一种形式: type function(args)
但是可以根据函数参数的类型大致分为

  • 传值
  • 传址

传值

传值的意思是直接传递变量的值比如,使用交换整型c,d值为例,定义名为swap的函数来交换c,d的值:

#include <stdio.h>
void swap(int a,int b){
    int tem;
    tem = a;
    a = b;
    b = tem;
}
int main(){
    int c=1,d=2;
    swap(c,d);
    printf("c = %d, d= %d\n",c,d );
    return 0;
}

而这个时候执行的结果却是:

c = 1, d= 2

可见此时c,d的值并没有交换.
分析下原理

所谓的传值,相当于把main函数中的局部变量c,d的值传给了swap函数中的局部变量a,b.
所以此时的a,b是c,d的一个“副本”,也就是说a,b和c,d的内存空间不同,只是值相同,改变a,b的值并不影响c,d的值.

传址

传址的意思是传递一个指向变量的指针,而非传递变量的值.也就是函数收到了变量的地址,此时函数可以通过变量的地址修改变量的值,也以交换整型c,d的值为例,定义名为swap的函数来交换c,d的值:

#include <stdio.h>
void swap(int *a,int *b){
    int tem;
    tem = *a;
    *a = *b;
    *b = tem;
}
int main(){
    int c=1,d=2;
    swap(&c,&d);
    printf("c = %d, d= %d\n",c,d );
    return 0;
}

此时执行的结果是:

c = 2, d= 1

可见此时c,d的值成功被交换了
分析原理:

所谓的传址,相当于把一个储存有变量地址的变量&c,&d传给了swap函数的a,b
所以此时的a,b是储存有c,d内存地址的指针,通过指针找到变量并修改变量的值即可对c,d进行修改.

总结

传值 和 传值 的本质是相同的,都是传递 变量 ,但是传值只可以获取到原变量的值,不能修改原变量的值,而传址可以获取和修改原变量的值.


特别注意

当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!!
当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!!
当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!!
因为数组就是一个指针

本文作者:小明
本文链接:https://blog.sixming.com/index.php/archives/22/
最后修改时间:2019-09-23 16:21:08
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!

评论

textsms
支持Markdown语法
email
link

mode_comment 全部评论 暂无评论(;´д`)ゞ