1.值传递和地址传递

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

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

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

举栗子:

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

运行结果

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

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

void main(){
    int m=10;
    int *p=&m;
    printf("在main函数中,m值的地址:%p\n",&m);
    printf("在main函数中,p指针的值(p所指向变量的地址):%p\n",p);
    printf("在main函数中,p指针的地址(指针变量本身也要占存储单元):%p\n",&p);
    fun2(p);//传的是p的值,该值是m的地址
    printf("执行fun2函数后,m的值是(由于形参和实参共用内存的同一地址,形参改变实参也改变):%d\n",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("数组名的值:%p\n",arr);
        printf("数组的地址值:%p\n",&arr);
}

运行结果

C语言函数参数传递详解相关推荐

  1. C++函数参数传递详解

    目录 第一种传递方式:按值传递 第二种传递方式:指针传递 第三种传递方式:引用传递 const参数 main()函数的参数 大家都知道,在函数中参数分为实参和形参(参看本篇文章)https://mp. ...

  2. c 传入易语言字节,易语言字节集参数传递详解

    易语言多线程之字节集参数传递 传递文本可以直接传递文本的指针,但是字节集却不能这样,看下面直接传递字节集指针的代码: .版本 2 .支持库 spec .支持库 EThread .程序集 窗口程序集1 ...

  3. C++语言函数重载详解和示例

    C++ 函数重载的概念 在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同.例如把变量的值写入文件,变量的类型int.long.double.char,需要通过参数把变量传入函数.在 ...

  4. C语言---函数介绍详解

    生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识--左拉 文章目录 前言 函数 模块化程序设计方法 函数的定义 函数的分类 函数定义角度 库函数 自定义函数 函数形式角度 无参函数 ...

  5. 七、C语言函数定义详解

    文章目录 1.函数的声明和定义 2.函数的调用 3.函数参数的两种传递方式 1.传值调用(C语言默认传递参数方式) 2.引用调用 4.函数的分类 1.内部函数(静态函数) 2.外部函数 1.函数的声明 ...

  6. 计算机科学类专升本复习之“C语言函数定义”详解(初稿)

    今天首先要讲的是C语言的无参函数定义 函数 如果不接收"用户传递"的数据,那么定义时可以不带参数 例如: dataType kangkang(){ //nb } dataType: ...

  7. 【C语言函数参数详解】——实际参数(实参)形式参数(形参)

    文章目录 一.什么是实际参数(实参) 二.什么是形式参数(形参) 三.形参与实参的关系 这篇文章我们一起学习一下函数的参数,函数的参数分为实参和形参. 一.什么是实际参数(实参) 首先我们来学习实参, ...

  8. c语言 is函数,关于C语言回调函数的详解~

    原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...

  9. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

  10. R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表

    R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表

最新文章

  1. python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号
  2. eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
  3. java ast 添加注解_基于AST的组件化自动插桩方案
  4. spark 执行流程及各组件执行
  5. Labview 串口通信之——PC控制云台方向
  6. js前端导出excel:json形式的导出
  7. Java打印车票主要学习Java的比较语句
  8. ASP.NET MVC 在控制器中获取某个视图动态的HTML代码
  9. 微信小程序 - 基本学习资源
  10. C++ 引用和指针有什么区别?
  11. 超详细!一文详解 SparkStreaming 如何整合 Kafka !附代码可实践
  12. perl:非贪婪的数量词
  13. 技巧:Eclipse阿里代码规范插件
  14. android ssh软件,优秀的 Android SSH 工具推荐
  15. android 播放pcm的软件,应用AudioTrack播放PCM音频数据(android)
  16. 计算机专业哪个考研简单,考研哪些专业比较简单好考?
  17. java 多线程高级,java 多线程高级(传统多线程)
  18. 华为荣耀屏鸿蒙,荣耀智慧屏:华为鸿蒙迈出的第一步
  19. java心电图_使用原生js+canvas实现模拟心电图
  20. 【产品化 IT】在产品化 IT 的道路上避免流量拥堵的 3 种方法

热门文章

  1. 适合初学者的大数据学习路线
  2. 单片机:LCD1602
  3. matlab 整数规划 非线性,非线性整数规划matlab
  4. ArcGIS地理数据处理高级教程_004_1遇到没有地理参照系信息的数据怎么办
  5. 计算机办公自动化试题及答案,计算机等级考试,办公自动化考试试题(三)
  6. 计算机九宫格游戏怎么玩,《九宫格数独》怎么玩 数独玩法介绍
  7. php第三方分享插件下载地址,PhpWind安装分享插件
  8. 【输入法】迄今为止,居然有这么多汉字输入法!
  9. windows server2016 如何安装IIS
  10. win11 JDK环境变量的配置