我是靠谱客的博主 自由酸奶,最近开发中收集的这篇文章主要介绍C语言函数参数传递详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.值传递和地址传递

  (1)值传递:即按“值(如数字10)”传递参数,是将实参变量的值复制一个到临时存储单元中(该存储单元会随着调用的函数运行结束而释放掉),如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变

 (2)地址传递:即按“地址(如0019FEDC)”传递参数,把实参变量的地址传送给被调用函数,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变

注:值传递在函数调用过程中会为形参重新开辟空间,形参与实参分别占用不同的地址空间,而地址传递,形参和实参共用同一内存地址

举栗子:

①值传递(普通类型变量的参数传递)
void fun1(int a){
    a=2;
    printf("在fun1函数中,变量a值的地址是:%pn",&a);
    a=a+1;
}
void main(){
    int n=1;
    printf("在main函数中,变量n的地址是:%pn",&n);
    fun1(n);
    printf("fun1函数中形参a加1之后,实参n的值是%dn",n);//n的值任然不变还是1
}

运行结果

②地址传递(指针作为参数)

void fun2(int *q){
    printf("在fun2函数中q的值是(和m的地址,p的值一样):%pn",q);
    *q=*q+5;
}

void main(){
    int m=10;
    int *p=&m;
    printf("在main函数中,m值的地址:%pn",&m);
    printf("在main函数中,p指针的值(p所指向变量的地址):%pn",p);
    printf("在main函数中,p指针的地址(指针变量本身也要占存储单元):%pn",&p);
    fun2(p);//传的是p的值,该值是m的地址
    printf("执行fun2函数后,m的值是(由于形参和实参共用内存的同一地址,形参改变实参也改变):%dn",m);
}

注:当 “ * ” 有两个作用 。作用一(定义指针变量):int *p;   作用二(取值):int m=10;  int p=&m;  printf(*p)//输出10

运行结果

③数组名的参数传递

“数组名的值”和数组的地址都存储了数组的首地址

void fun3(int arr[]){
    for(int i=0;i<5;i++){
        printf("%d",arr[i]);
    }
}
void fun4(int *arr){
    for(int i=0;i<5;i++){
        printf("%d",arr[i]);
    }
}

void main(){

        int arr[5]={1,3,5,7,9};
        int*r;
        r=arr;
        fun3(arr);//传数组名
        printf("n");
        fun4(r);//传递指针
        printf("n");
        printf("数组名的值:%pn",arr);
        printf("数组的地址值:%pn",&arr);
}

运行结果

最后

以上就是自由酸奶为你收集整理的C语言函数参数传递详解的全部内容,希望文章能够帮你解决C语言函数参数传递详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部