C语言函数传递方式

值传递

定义

  • 所谓的值传递,顾名思义就是使用变量、常量、数组等作为函数的参数。实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元。

特点

  • 值传递的特点是单向传递,即主调函数被调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并维持数值不变。

示意图


其实值传递过程中由隐含的一步,如下代码所示:

 int x = a;int y = b;

所以swap1函数交换的是x和y,而原来的a和b从未改变。

代码演示

void swap1(int x,int y)
{int temp;temp = x;x = y;y = temp;printf("x = %d,y = %d\n",x,y);
}
int main(int argc, char *argv[])
{int a = 12,b = 24;swap1(a,b); // 值传递 printf("a = %d b = %d",a,b);
}

运行结果


地址传递

说明

  • 大家都知道,在C语言中,数组名就代表数组的首地址。所谓的地址传递,指的就是函数的参数是数组名或者指针。传递的是数组的首地址或指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元,即形参和实参是相同的。

特点

  • 形参并不存在存储空间,编译系统不为形参数组分配内存。因此在数组名或指针作函数参数时所进行的传送只是地址传送,形参在取得该地址之后,与实参共同拥有一段内存空间,形参的变化也就是实参的变化。

示意图


注意:这里也有一个隐含动作,如下代码所示:

 x = &a;y = &b;

分别将a的地址,b的地址赋值给x和y,这样swap2函数操作的数其实就是a和b。

代码演示

void swap2(int* x,int* y)
{int temp;temp = *x;*x = *y;*y = temp;printf("x = %d y = %d\n",*x,*y);
}
int main(int argc, char *argv[])
{int a = 12,b = 24;swap2(&a,&b); //地址传递printf("a = %d b = %d",a,b);
}

运行结果


以上就是C语言值传递和地址传递的区别了,相信大家应该很清楚了吧!

C语言函数传递方式-值传递和地址传递相关推荐

  1. 【❗划重点!C语言函数参数传递只有两种方式(值传递,地址传递),不支持“引用传递”!❗】

    引子 上篇文章<C语言函数传参の结构体数组篇>提到了C语言的函数参数传递方式,百度了一一一大圈,有说两种的,也有说三种的,简直把我搞晕了,"值传递和地址传递"是毫无疑问 ...

  2. C语言中函数参数传递的方式:值传递,地址传递

    ** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...

  3. c语言中的值传递和地址传递参数,c语言值传递,地址传递,引用传递

     c语言值传递,地址传递,引用传递 总结:对于函数来说,值传递就是一个人来了,给你一些数 据,你对数据处理.地址传递就是你通过地址找到一个人,然后直接对这个人处理.而引用传递就是你要直接对一个人进行处 ...

  4. C语言值传递与地址传递

    一.C语言函数的值传递 C语言的值传递,顾名思义就是使用常量.数组等作为函数的参数,定义一个函数后,其在被主函数调用的过程中,实际是将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储 ...

  5. C语言指针值传递和地址传递

    C语言传参分为值传传递和地址传递.C语言指针传参时,可以通过指针引用方式改变指针指向的值.改变变量,可以使用指针应用方式,改变地址,使用指针的指针引用方式. C语言值传递: 形参是实参的拷贝,改变形参 ...

  6. C++函数参数传递--值传递和地址传递

    直接上代码: //函数参数的传递 //值传递和地址传递.值传递是将实参传递给函数之后,系统建立了一个实参的副本,其值和实参相同. //值传递无法改变实参的值,改变的只是实参的副本,如: #includ ...

  7. java形参和实参的三种传递方式(值传递,地址传递,引用传递)

    博客 博客 值传递:对形参的修改不会影响到实参 引用传递:对形参的修改会影响实参 一.值传递 在主函数中 #include <iostream> using namespace std;v ...

  8. 细说值传递、引用传递和地址传递

    细说值传递.引用传递和地址传递 1 实参和形参 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数. 实际参数:在调用有参函数时,主调函数和被调函数之间有数据传递关 ...

  9. C语言函数返回值与参数传递

    C语言函数返回值与参数传递 一:参数传递 C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式. 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int ...

最新文章

  1. 谜题81:烧焦到无法识别
  2. 探秘HDFS —— 发展历史、核心概念、架构、工作机制 (上)| 博文精选
  3. 水印鲁棒性的分析matlab程序,图像数字水印+matlab程序
  4. java 生成验证码
  5. 【LeetCode】【HOT】102. 二叉树的层序遍历(队列)
  6. estimator 模型保存与使用
  7. 【Android开发】之Android环境搭建及HelloWorld
  8. Atitit 常见面试问题回答法 原则与细则 目录 1.1. 1、工作多久了?为什么离职? 1 1.2. 、自我评价 1 1.3. 问你有什么缺点 2 1.4. 4、理想薪资 2 1.5. 职业规
  9. Python必会知识点详细笔记(B站黑马程序员) 上篇 面向过程
  10. 【2020-09-22】某药品信息APP抓包
  11. linux中iso文件怎么安装,linux系统安装iso文件方法
  12. JS基础——选项卡列表显示隐藏缩略图(函数传参)
  13. 万字长文!让你懂透编译原理(二)——第二章 高级语言及其语法描述
  14. 跨平台flutter- window与Android Studio环境配置
  15. day03--面向对象--类的继承
  16. linux kernel decompress_kernel 启动解压
  17. Python基础(三)
  18. 新概念1 课文和单词(2022/12/22)
  19. MT6763芯片datasheetMT6763芯片规格书MT6763芯片数据手册资料
  20. java正则表达式原理_Java 正则表达式详解

热门文章

  1. 解决React中路由跳转报错:Cannot read property ‘push’ of undefined
  2. 清华博士计算机视觉,清华姚班本科生荣获国际计算机视觉与模式识别大会最佳论文奖...
  3. jquery选项卡效果
  4. 第八届蓝桥杯大赛个人赛决赛(CB软件类)真题
  5. 【天猫erp、发货接口】如何从点击、访客、销量方面提升拼多多流量
  6. Android display 显示流程
  7. 计算机科学与技术就业前景分析,计算机科学与技术专业就业前景分析
  8. Markdown:五分钟Markdown教程
  9. python中 fitz 库和 pdfplumber 混合操作
  10. php显示大写金额,PHP数字金额转换成中文大写显示