参数传递(引用,指针,值传递)C++11

C++中,函数的参数传递方式有值传递、地址传递。传地址有指针和引用方式。

在函数参数中,传地址的理由有:

1.使被调函数可以修改主调函数中的数据对象;

2.传地址可以减少数据拷贝,提高程序执行速度。

那么,何时使用值传递,何时使用地址传递(指针和引用)?

下面是一些写代码时会遇到的一些情况

被调函数使用参数对象时,不会修改数据对象

  1. 如果要传入函数的数据对象较小,比如是内建数据类型或小规模的结构体,那么使用值传递;
  2. 如果数据对象是数组,那么使用指针(这也是你唯一的选择)。指针添加const修饰;
  3. 如果数据对象是大规模的结构体,使用const指针或const引用;
  4. 如果数据对象是class对象,使用const引用。这也是C++中传递class对象的标准做法;

被调函数使用参数对象时,会修改数据对象

  1. 数据对象是内建数据类型,使用指针(func(&var)表明函数中要修改var,比使用引用的调用形式func(var)可读性好);
  2. 数据对象是数组,指针是唯一的选择;
  3. 数据对象是结构体,使用指针或引用;
  4. 数据对象是class对象,使用引用;

当然,以上只是一般情况。特殊情况另外讨论。

时间: 2024-11-25 01:48:51

参数传递(引用,指针,值传递)C++11的相关文章

JavaScript 函数参数传递到底是值传递还是引用传递

tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备.那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num;

java中方法的参数传递机制(值传递还是引用传递)

看到一个java面试题: 问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?  答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. 以下是从其他文章里转的,只为加深理解 public class TempTest { private void te

指针和引用、值传递和引用传递

1.指针和引用 指针是一个变量,它存储的是内存地址:引用和原来的变量是同一个,对引用修改会改变原变量,而修改指针只是修改了指向的内存 可以有const指针.但是没有const引用:指针可以多级int **p;引用只有1级 int &&p不合法 指针可空,引用必须初始化:指针可以修改,可以指向别的变量:引用不能修改,只能是那个变量的引用 2.值传递和引用传递 值传递,会创建变量的一个临时副本,对它修改不会改变原变量 引用传递,因为引用是原变量的一个别名,对引用修改会改变原值 指针作为函数参数

指针值传递、指针的指针、指针的引用、无法返回临时变量地址

#include <stdio.h>#include <stdlib.h>#include <string.h> void GetMemory(char *p){ //char *p = str, p = str(值传递,跟str无关,内存分配失败) p = (char*)malloc(100);}void GetMemory1(char **p){ //char **p = &str, p指向str指针的地址,*p指向str的地址,*p = str, *p分配

方法的参数值和值传递机制

1 可变个数的形参的方法: 如: public void print(int i, String...args) 调用: t.print(3,”hello we”,”god like”); 2 java的参数传递机制: 值传递 (1)形参是基本数据类型的:将实参的值传递给基本数据类型的变量 public static void main(String[] args) { TransParam1 t = new TransParam1(); int i=33; int j=45; System.o

疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调用者) 1 public class MathTest{ 2 public static void main(String[] args){ 3 System.out.println(Math.sin(1.57)); 4 System.out.println(Math.sin(Math.PI/2))

c++中函数参数传递(值传递、指针传递,引用传递)进一步认识

概念 首先从概念上来说一下这几种函数传参方式及区别: 1.值传递:形参是实参的拷贝,改变函数形参的值并不会影响外部实参的值,这是最常用的一种传参方法,也是最简单的一种传参方法,只需要传递参数,返回值那是return考虑的: 2.指针传递:指针传递参数从本质上来说也是值传递,它传递的是一个地址.[值传递过程中,被调函数的形参作为被调函数的局部变量来处理,即在函数内的栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成了实参的一个副本(记住这个,函数内参数的是实参的副本)].由于指针传递的是外部

參数传递(引用,指针,值传递)C++11

C++中,函数的參数传递方式有值传递.地址传递.传地址有指针和引用方式. 在函数參数中,传地址的理由有: 1.使被调函数能够改动主调函数中的数据对象: 2.传地址能够降低数据拷贝,提高程序运行速度. 那么,何时使用值传递,何时使用地址传递(指针和引用)? 以下是一些写代码时会遇到的一些情况 被调函数使用參数对象时,不会改动数据对象 假设要传入函数的数据对象较小,比方是内建数据类型或小规模的结构体,那么使用值传递: 假设数据对象是数组,那么使用指针(这也是你唯一的选择).指针加入const修饰:

【转载】C++ 值传递、指针传递、引用传递详解

原文链接:http://www.cnblogs.com/yanlingyin/ 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值.从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入, 不能传出.当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递. 指针传递: 形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作 引用传递: 形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数