函数传参
在开发过程中,为了加强可读性,一般会使用函数封装代码.而在函数的使用中,会出现函数传参的情况. 而这个时候就会出现一点问题了!
函数传参的类型
函数传参只有一种形式: 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进行修改.
总结
传值 和 传值 的本质是相同的,都是传递 变量 ,但是传值只可以获取到原变量的值,不能修改原变量的值,而传址可以获取和修改原变量的值.
特别注意
当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!! 当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!! 当在函数中传递 数组 的时候 ,即使是传值也可以修改原数组的值!!!! 因为数组就是一个指针