形参的种类及其能否改变实参

函数的形参主要可分为地址和非地址,每种可再分为有无取地址符&
**取地址符&**的作用是让函数运行时不开辟新的空间,不产生新的形参,而是根据地址直接到函数外找到传入的实参,对实参进行操作,因此只要有&都是可以改变形参的。
在这里说明,由于数组名的实质是整个数组首元素的地址,因此其也算地址。
于是大致可以分为以下四类,在此一一说明。

  1. 传入地址并取地址:由于取了地址,则函数不开辟新空间,而是根据传入的地址(地址的地址)找到这个实参,发现这个实参存的是一个地址(相当于指针),再根据地址找到这个变量(指针指向这个变量)。于是函数中的操作都是对这个变量本身进行,可以实际改变参数。
  2. 传入地址但不取地址:因为不取地址,所以函数开辟了新变量,这个变量在函数结束时销毁,其值等同于传入的参数(地址)。当函数对这个变量进行操作时,其实是根据地址找到实际的变量进行操作,也相当于是对指针所指的量进行操作,可以实际改变参数。
  3. 传入非地址并取地址:由于取了地址,则函数不开辟新空间,而是根据传入的地址直接找到实参,对其进行操作,可以改变实际参数。
  4. 传入非地址但不取地址:因为不取地址,所以函数开辟了新变量,新变量的值等于实参的值。函数对这个变量的操作是独立的,不影响实参的值。函数结束的时候将新变量销毁,并未改变实际参数。(实际上,实参在这类函数中将自己的值赋给形参之后,就再也没用到了)

形参的种类及其能否改变实参相关推荐

  1. (重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  2. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  3. java形参改变实参_java方法改变形参后得到实参值是否改变

    public voidtest1(){ String s= "1"; System.out.println("调用方法hange1前s的内存地址:"+Syste ...

  4. c语言中函数形参值改变了,相应的实参值是否改变,C语言中,如何利用函数和指针变量通过形参变量的值改变实参变量的值...

    必备知识:c语言中的函数调用和指针变量的相关知识 众所周知,函数是C语言中一个十分重要的模块,因为函数的存在,使得C语言的可读性.可维护性.可移植性大大提高.因此,想要学好C语言,必须要学好函数.函数 ...

  5. c语言函数实参是赋值语句,c语言说形参不能改变实参的值,为什么这个赋值语句可以...

    c语言说形参不能改变实参的值,为什么这个赋值语句可以0 cpystr(q1; printf(" cpystr(char *p1,*q2,char *p2) {while(*p2++=*p1+ ...

  6. python函数调用时的实参和形参之间传递_python 函数(实参与形参、传递参数)...

    函数 什么是函数?函数是带名字的代码块,用于完成具体的工作.写出一个函数后,就可以一直调用. 定义函数,函数的基本组成: 1.1 向函数传递参数 向函数中传递任意参数,这样打印出的结果就可以根据自己的 ...

  7. java改变实参_java中引用传递问题,在函数中修改引用的指向,会不会影响实参?...

    是时候展现一下我的JAVA基础知识了,2333. 我按照执行顺序给你写注释好了. Person p1 = new Person(10); //创建了一个对象 //p1.age=10; modify(p ...

  8. c++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取,2013年计算机二级C++模拟试题十一及答案...

    28.下面程序的结果为( ) #include int c; class A{ private: int a; static int b; public: A() {a=0;c=0;} void se ...

  9. c++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取,C++综合练习题2...

    C++程序设计综合练习题(二) 一.单项选择题 1. 静态成员函数没有() A. 返回值 B. this指针 C. 指针参数 D. 返回类型 2. 假定AB为一个类,则执行"AB a(2), ...

最新文章

  1. python读写文件函数_Python读写文件
  2. 优化C代码常用的几招
  3. Android之ArrayAdapter使用
  4. wordpress漏洞_多个WordPress插件SQL注入漏洞分析
  5. kindle 笔记/标注导出
  6. NYOJ 453 小珂的烦恼
  7. 显示多文档标签_HTML常用基础标签,前端从入门到精通
  8. php pdo效率,php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
  9. 文荣:7月24日阿里云上海峰会网络大神
  10. QQ自动发送信息脚本
  11. 是什么门的缩写_什么是FBA
  12. Catia二次开发:数组,局部变量等,msgbox,背景颜色,enable属性,图片模块,vb的common dialog控件,键盘鼠标事件,text操作
  13. 用python计算有效前沿_【投资组合理论】Python绘制上证50成分股有效前沿和CML
  14. 做最好的自己(李开复)
  15. 中国新中产家庭“清洁观”:能躺着不站着,能靠科技不靠手
  16. mactex+vscode+skim打造latex编译环境
  17. 通证经济大局观(三十):贵族的没落
  18. 使用beautifulSoup
  19. 促销式软文在写作时风格要有创新
  20. QPS、TPS、并发用户数、吞吐量关系

热门文章

  1. 2018 美团校招笔试题详解
  2. 企业使用虚拟码号的优势!
  3. 服务器系统的监测,服务器监测系统
  4. ue4 后期处理景深_【UE4设计师】2-3后期处理效果——使用景深设置电影拍摄
  5. OpencvSharp的Mat类型数组传入c++的DLL
  6. java 阶乘后几位,java阶乘计算获得结果末尾0的个数代码实现
  7. 在ubuntu下烧写映像文件到nand--基于三星210开发板
  8. 分布式架构(一) —— 理解什么是是分布式
  9. 统计双色球各个数字的中奖概率
  10. java大厂技术面试第二课 多线程和锁