C++面试常见问题——15函数的值传递、指针传递、引用传递
函数的值传递、指针传递、引用传递
值传递
形参是实参的拷贝,该表形参的值并不会影响外部的实参。值传递是单向的(实参-->形参),参数的值只能传入,不能传出。当函数内部需要修改参数并且不影响调用者时,采用值传递。
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); //函数调用时也会为形参开辟内存空间,但是里面存放的是实参的地址
参考链接:
C++面试常见问题——15函数的值传递、指针传递、引用传递的更多相关文章
- Java 为值传递而不是引用传递
——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...
- 【Qt】信号和槽对值传递参数和引用传递参数的总结
在同一个线程中 当信号和槽都在同一个线程中时,值传递参数和引用传递参数有区别: 值传递会复制对象:(测试时,打印传递前后的地址不同) 引用传递不会复制对象:(测试时,打印传递前后的地址相同) 不在同一 ...
- java是值传递,还是引用传递?
原文地址:http://blog.csdn.net/zxmzfbdc/article/details/5401960 java到底是值传递,还是引用传递?以前国内的java开发者有过很多争论,由于& ...
- c语言 函数传输传递的三种方式(值、指针、引用)
本文摘自<彻底搞定c指针> 一.三道考题开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, in ...
- java都是值传递,没有引用传递
博主这几天在复习 javaSE 部分的内容时,遇到了关于参数传值的问题,但是始终不知道原因,上网上一查才知道钻牛角尖了,把C语言的参数传值转移到java中了. 相信很多在学习java之前,有接触过C/ ...
- java方法中只有值传递,没有引用传递
public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...
- 【Java基础】11、java方法中只有值传递,没有引用传递
public class Example { String testString = new String("good"); char[] testCharArray = {'a' ...
- java值转递?引用传递?
值传递是传递的是原值的副本,引用传递传递的是原值. 在Java中,如果是基本数据类型,传递的是该参数字面量值的拷贝.如果是引用数据类型,传递的是该参数所引用对象在堆中地址的拷贝. swap(int a ...
- C++函数的传值调用&指针调用&引用调用
目录 传值调用 指针调用 引用调用 传值调用 该方法把参数的实际值复制给函数的形式参数.在这种情况下,修改函数内的形式参数对实际参数没有影响. #include<iostream> usi ...
随机推荐
- [阿里移动推荐算法]比赛_快速入门_4_19_update_仅供参考,思维不要受局限
[这里只讲快速入门——即破题,正负样本不平衡.特征数量等问题就自己多看论文或者其他资料吧~~如果还有数据挖掘相关基础知识不了解的,建议看看<数据挖掘导论>] [以下是理解错误案例]:错误的 ...
- spriteKit简单学习
https://shimo.im/docs/YejitfPrGkcNO3Ls/ <SpriteKit学习相关> 关于SpriteKit https://www.jianshu.com/ ...
- ab的压力测试(转)
其中-n代表请求数,-c代表并发数 返回结果: ##首先是apache的版本信息 This is ApacheBench, Version 2.3 <Revision:655654> Co ...
- win10上安装mysql8(installer方式)并创建用户开启远程连接
1.进去mysql官网,下载mysql安装工具: 2.运行下载的mysql-installer-community-8.0.17.0.msi,一次往下执行就好了,以下是几个注意的点: 后面还有个地方就 ...
- 最长公共子序列/子串 LCS(模板)
首先区分子序列和子串,序列不要求连续性(连续和不连续都可以),但子串一定是连续的 1.最长公共子序列 1.最长公共子序列问题有最优子结构,这个问题可以分解称为更小的问题 2.同时,子问题的解释可以被重 ...
- 该怎样应对IoT和边缘计算安全挑战
导读 虽然智能家居的响应延迟似乎不是大问题,但如果自动驾驶汽车需要刹车,而数据出现延迟或者被黑客拦截或操纵,这可能造成灾难性后果.这里将需要边缘计算安全. 边缘计算可在靠近远程设备的位置提供计算.存储 ...
- Android编程实现点击链接打开APP功能示例
本文实例讲述了Android编程实现点击链接打开APP功能.分享给大家供大家参考,具体如下: 在Android中点击链接打开APP是一个很常见的需求.例如,电商为用户发送优惠券之后经常会下发一条短信: ...
- redhat 7.6 rsync 配置,实时同步脚本
1.查看rsync,并安装 yum install rsync -y 2.配置/etc/rsyncd.conf文件 建议cp一份作为备份,清空内容复制以下配置 [服务端配置]log file = /v ...
- 1.requests+正则表达式爬猫眼电影TOP100
import requests from requests.exceptions import RequestException def get_one_page(url):try: response ...
- Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...