函数的值传递、指针传递、引用传递

值传递

形参是实参的拷贝,该表形参的值并不会影响外部的实参。值传递是单向的(实参-->形参),参数的值只能传入,不能传出。当函数内部需要修改参数并且不影响调用者时,采用值传递。

void Exchange(int a,int b){
int tmp;
tmp = a;
a = b;
b = tmp;
}
int m = 3,n = 54;
Exchange(m,n); //不会改变m,n的值。形参a,b和变量tmp在Exchange被调用时在栈中被开辟,调用结束后被销毁,传值进来不会影响原先的变量m,n

指针传递

形参为指向实参的地址,当对形参的指向操作时,相当于对实参本身进行操作。

指针传递方式与值传递方式类似,只不过传的是变量的地址值。

void ExchangeP(int *pa,int *pb){
int tmp;
tmp = *pa;
*pa = *pb; //地址不能乱改不能写成pa = pb;
*pb = tmp; }
int m = 3,n = 54;
ExchangeP(&m,&n);

引用传递

形参相当于实参的别名,对形参的操作其实就是对实参的操作,虽然在调用函数时也为形参开辟了内存空间,但是存放的是实参的地址,被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问实参变量。所以被调函数中所有对形参的操作都影响着实参。

void Exchange_(int &pa,int &pb){
int tmp;
tmp = pa;
pa = pb;
pb = tmp; }
int m = 3,n = 54;
Exchange_(m,n); //函数调用时也会为形参开辟内存空间,但是里面存放的是实参的地址

参考链接:

  1. [C++ 值传递、指针传递、引用传递详解]

C++面试常见问题——15函数的值传递、指针传递、引用传递的更多相关文章

  1. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  2. 【Qt】信号和槽对值传递参数和引用传递参数的总结

    在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...

  3. java是值传递,还是引用传递?

    原文地址:http://blog.csdn.net/zxmzfbdc/article/details/5401960  java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于& ...

  4. c语言 函数传输传递的三种方式(值、指针、引用)

    本文摘自<彻底搞定c指针> 一.三道考题开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, in ...

  5. java都是值传递,没有引用传递

    博主这几天在复习 javaSE 部分的内容时,遇到了关于参数传值的问题,但是始终不知道原因,上网上一查才知道钻牛角尖了,把C语言的参数传值转移到java中了. 相信很多在学习java之前,有接触过C/ ...

  6. java方法中只有值传递,没有引用传递

    public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...

  7. 【Java基础】11、java方法中只有值传递,没有引用传递

    public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...

  8. java值转递?引用传递?

    值传递是传递的是原值的副本,引用传递传递的是原值. 在Java中,如果是基本数据类型,传递的是该参数字面量值的拷贝.如果是引用数据类型,传递的是该参数所引用对象在堆中地址的拷贝. swap(int a ...

  9. C++函数的传值调用&指针调用&引用调用

    目录 传值调用 指针调用 引用调用 传值调用 该方法把参数的实际值复制给函数的形式参数.在这种情况下,修改函数内的形式参数对实际参数没有影响. #include<iostream> usi ...

随机推荐

  1. Centos10卸载nginx

    1.停止服务 /usr/local/nginx/sbin/nginx -s stop yum remove nginx 2.查看Nginx相关文件 whereis nginx 删除:rm -rf /u ...

  2. Redis数据的导出和导入(dump和load方式)

    迁移redis数据一般有如下3种方式: 第三方工具redis-dump,redis-load aof机制,需要开启aof功能 rdb存储机制 这里介绍第一种方式,通过redis-dump导出数据,再通 ...

  3. 利用DFS算出有多少个连通图

    以下面一个题目为例,[题目链接]: https://www.luogu.com.cn/problem/P4961 题目中涉及求出八联通图的个数,这里给出这步的代码: memset(vis, 0, si ...

  4. MyBatis+Oracle实现主键自增长的几种常用方式

    一.使用selectKey标签 <insert id="addLoginLog" parameterType="map" > <selectK ...

  5. Python使用pyautogui控制鼠标键盘

    官方文档:https://pyautogui.readthedocs.io/en/latest/# 安装pyautogui模块 在 Windows 上,不需要安装其他模块. 在 OS X 上,运行 s ...

  6. PTA的Python练习题(八)

    从 第3章-15 统计一行文本的单词个数 继续 1. s = input() count=0 for c in s: if c==' ': count=count+1 if c=='.': break ...

  7. python 基础之深浅拷贝

    深浅拷贝 s=[[1,2],'fgfgf','cx'] s3=s.copy() print(s) print(s3) 测试 D:\python\python.exe D:/untitled/dir/f ...

  8. Aho-Corasick (AC) 自动机

    基础:AC自动机是建立在 trie 树和 kmp 基础之上的,为什么这么说,因为AC自动机是基于字典树的数据结构之上的,其次它是一个自动机,用到了 kmp 的失配数组的思想. 应用:在模式匹配的问题中 ...

  9. Systemverilog for design 笔记(三)

    转载请标明出处 用户自定义和枚举数据类型 1. 用户自定义类型(typedef) 局部typedef定义:只用于设计的特定部分时,typedef的定义可在module或interface中 共享typ ...

  10. Java入门程序“hello,world!”

    1.程序开发步骤说明 开发环境已经搭建完毕,可以开发我们第一个Java程序了. Java程序开发三步骤:编写.编译.运行.(图片介绍)   2.编写Java程序 新建一个普通的记事本,给其命名为Hel ...