1.形式参数和实际参数

1.1形式参数

形参出现在被调函数当中,在整个函数体内都可以使用。形参在定义时编译系统并不分配存储空间,只有在调用该函数时才分配内存单元。调用结束内存单元被释放,故形参只有在函数调用时有效,调用结束时不能再使用。

1.2实际参数

实参出现在主调函数当中,当函数调用时,朱调函数把实参的值传送给被调函数的形参,从而实现函数间的数据传递。传递方式有两种:值传递和地址传递方式。

2.变量作为函数参数

当形参定义为变量时,实参可以是常量、变量和表达式,这种函数间的参数传递为值传递方式。值传递的特点是参数的“单向传递”;

int swap(int a,int b)

{

int temp;

temp=a;

a=b;

b=temp;

return 0;

}

int main (void){

int a=3,b=4;

swap(a,b);

}由于是值传递,单向传递,并不会改变a,b的值。

3.数组作为函数参数

3.1数组元素作为函数参数

数组元素又称为下标变量,它具有普通变量的一切性质,因此数组元素作为函数的实参进行数据传递是与普通变量没有任何区别,也是值传递

int swap(int a,int b)

{

int temp;

temp=a;

a=b;

b=temp;

return 0;

}

int main (void){

int a[]={3,4};

swap(a[0],b[0]);

}

同样是值传递并不会改变a[0]的值。

3.2一维数组名作为函数参数

数组名是一个地址,是数组的首地址,因此用数组名作为函数的参数进行数据传递时,执行的是地址传递方式。所谓地址传递,顾名思义实参传递的不是数据本身,而是数据存在的地址。函数调用时,把数组名即数组的首地址作为实参传递给形参(必须是可接受地址的数组名或者指针变量),形参数组名取得首地址后就有了实在的数组,这时实质上实参和形参是同一个数组,指向同一段存储空间,实参的改变就是对形参的改变,所以传址方式可看成是数据进行了“双向传递”。

3.3数组指针,即数组元素的地址作为函数参数

由于数组元素的地址的本质仍然为地址,所以属于地址传递方式。

int swap(int *a,int *b)

{

int temp;

temp=*a;

*a=*b;

*b=temp;

return 0;

}

int main (void){

int arr[] = {1,2};

int *a = &arr[0];

int *b = &arr[1];

swap(a,b);

}

重点:

数组元素(下标变量)作为函数的参数进行的数据传递是值传递方式,数组名(数组首地址)、数组元素的地址(&arr[0])作为函数参数进行的数据传递是地址传递方式。

实参为数组名是,形参接收时可以有三种形式:带下标的数组名(arr[0])。不带下标的数组名(arr)、可接收地址值的指针变量名(*a)。由于是参数组和形参数组都指向同一段内存单元,故它们操作的是同一批数据,所以形参的改变就是改变了实参中的数据。

原文:http://blog.csdn.net/qq_30351805/article/details/51344316

c语言中参数的传递方式是,C语言函数的参数及传递方式相关推荐

  1. c语言中出现void错误,关于C语言问题

    2007-04-25 C语言中,为什么有的自定义函数中,函数名前面有个 void ,例如void encryptchar(),它是说数据类型是空的吗 类型说明符"void"表示函数 ...

  2. c语言中申请内存并初始化,c语言中结构体的定义、初始化及内存分配

    #include struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数外 //相当于全局变量与局部变量 ...

  3. c语言中空格字符怎么表示_C语言中常用的字符串操作函数

    作者:陈太浪 出处:https://home.cnblogs.com/u/TomHe789/ C语言中提供了许多的字符串操作函数,常见的字符串操作函数有以下几种: 1.求字符串长度的函数 原型函数:s ...

  4. C语言中你可能会用到的字符串函数的代码

    将写内容过程中比较常用的内容段做个备份,下面资料是关于C语言中你可能会用到的字符串函数的内容. {if(dest == src)return dest;else if(dest < src){} ...

  5. Python编程语言学习:python语言中快速查询python自带模块函数的用法及其属性方法、如何查询某个函数关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略

    Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法.如何查询某个函数&关键词的用法.输出一个类或者实例化对象的所有属性和方法名之详细攻略 ...

  6. 1. C语言中只能使用单行注释,贵州大学C语言判断题

    1. C程序一个语句只能写在一行上. 2. #define N 10定义了一个值为10的变量N. 3. 设有int a;float f=5.75;在执行语句a=(int)f;后,f变成了int型. 4 ...

  7. c语言中预处理指令的作用,C语言中常用预处理指令

    转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...

  8. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  9. C语言中能运算符重载吗,C++语言中什么运算符不能重载

    2016-09-01 回答 c语言没有重载的概念,重载是c++的内容 c++运算符: 算术运算符:+,-,*,/,%,++,--; 位操作运算符:&,|,~,^(位异或),<<(左 ...

  10. c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc

    c语言中字符串的讲解(DOC可编).doc 第一部分:字符串的概念 ---字符串:用双引号引起来的一串字符.在C语言,系统将自动的为字符串添加一个结束标志\0 ,该结束标志不作为字符串的实际长度,但作 ...

最新文章

  1. c#_HashSet
  2. Retrofit 入门和提高
  3. 了解React.js中数组子项的唯一键
  4. 关于计算机图形学的学习(转)
  5. java 8 string_String.join() --Java8中String类新增方法
  6. 基于TFS实践敏捷-可视化管理
  7. 7、MySQL选择数据库(MySQL USE语句)
  8. 机器人 工具坐标系的标定
  9. [中文事件抽取]DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Lab
  10. 尤克里里怎么样_尤克里里和吉他区别?尤克里里与吉他相比有什么不可替代的优势...
  11. Spring3+Struts2+Hibernate4+Mybatis整合的一个maven例子
  12. 【干货】长文详解Attention的前世今生
  13. 比特币交易的脚本如何执行
  14. 安卓开源项目周报0301
  15. MySQL 源码下载教程
  16. FPS游戏通用自瞄实现
  17. ChinaITLab Linux实战工程师网校课程-8CD
  18. 制作一键架设服务器,制作一键端方法
  19. 使用DiskGenius拓展系统盘C盘的容量
  20. Vue mounted和created和 activated

热门文章

  1. Redis在Window服务下的安装
  2. 拖动卡顿_四招教你解决PS软件卡顿问题!
  3. 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...
  4. derby mysql 同步_[Derby]数据库操作说明
  5. 简单mysql优化_mysql常见语句的简单优化策略
  6. 异步fifo_【推荐】数字芯片异步FIFO设计经典论文
  7. eclipse复制代码连接数据库404_推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大...
  8. qc成果报告范例_QC推进这样做才是货真价值!| 看机电股份的QC报告
  9. 扫雷程序设计 python_端口扫描
  10. win10 dns异常上不了网如何解决