Icon

Littleor

10693 分类: 闲语

C语言基础-函数传参

函数传参

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

函数传参的类型

函数传参只有一种形式: 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进行修改.

总结

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


特别注意

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

#none

作者: Littleor

版权: 除特别声明,均采用BY-NC-SA 4.0许可协议,转载请表明出处

目录Content

评论