C++中的值传递,引用传递及指针传递

C++的值传递,引用传递,指针传递这些概念一直是困扰C++程序员,我一直也没有一个能说清他们之间的关系通过一个简单的实例,或者说浅显的说法,找了一些相关资料,和自已的个人感受,简单介绍一下。

c++中传递参数的方式有三种:传参数的值(称为值传递,简称传值),传参数的地址(称为地址传递,简称为传址),和引用传递(简称为传引用),相应的函数也就是传值调用,传址调用和传引用调用

函数定义时参数表中的参数称为形式参数,简称形参,函数调用时参数表中的参数称为实际参数,简称实参,实参和形参之间的数据传递称为形实结合,通常情况下c++语言是传值调用,传值调用是单向的,即参数的值只能由实参传递给形参,而不能反过来由形参传递给值参,也就是说,从被调用函数的角度来看,参数的值只能传入不能传出。传值调用时实参可以是具体的数值、已经有值的变量和可求值的表达式,由于数值和变量都是表达市的一种,因此,传值调用时实参本质上是表达式。当函数被调用时,系统首先对实参表达式球值,然后将值传递给形参,换过一种思路,传值调用时,形参实际上是实参的一份拷贝,所以传递时不会改变外部变量实参的值,

假设声明一个变量int n=1;那么他在内存中的存储,我们可以这样来理解,第一:内存中1是指变量n的值,存储这个值的地址我们把他称为1的内存地址,也就是指针地址,n是他的名字,或者我们把他叫做1的大名,另外我们可以给他起一个别的名字,叫做小名,也叫别名,因为大名和小别都是指向同一个值,所以改变大名的值也就是改名小名的值,小名是大名的一种引用,理清了上面这些含义,我们就来举个例子.

int m;

int &n=m;

n是m的引用reference,m是被引用物referent。n相当于m的别名,

引用的一些规则如下:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。

(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。

(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

引用的主要功能是传递函数的参数和返回值。

C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递.

以下是“值传递”的示例程序。

由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n,所以n的值仍然是0。

#include <iostream>

using namespace std;

func(int x);

void main(){

int n=0;

func(n);

cout<<n<<endl;

}

func(int x){

x = x + 10;

}

时间: 2024-12-13 04:03:35

C++中的值传递,引用传递及指针传递的相关文章

c#中通过值和引用传递参数(downmoon)

c#中通过值和引用传递参数(downmoon)在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或

c#中通过值和引用传递参数

在 C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员(方法.属性.索引器.运算符和构造函数)更改参数的值,并保持该更改.若要通过引用传递参数,请使用 ref 或 out 关键字.为简单起见,本主题的示例中只使用了 ref 关键字.有关 ref 和 out 之间的差异的信息,请参见.使用 ref 和 out 传递数组. 本主题包括下列章节: 传递值类型参数 传递引用类型参数它还包括以下示例: 示例 演示 是否使用 ref 或 out 1 通过值传递值类型 否 2 通过引用

深入分析C++ 值传递、指针传递、引用传递

而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 指针与引用的相同点与不同点: ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不

C++编程规范之25:正确选择通过值、(智能)指针、或者引用传递参数

摘要:     正确选择参数:分清输入参数.输出参数,分清值参数和引用参数.正确地传递参数.     正确选择参数是通过值.通过引用还是通过指针传递,是一种能够最大程度提高安全性和效率的好习惯.     选择如何传递参数时,应该遵循一下准则.对于只输入参数:     1.始终用const限制所有指向只输入参数的指针和应用.     2.优先通过值来取得原始类型(如char.float)和复制开学比较低的值对象(如point.complex<float>)的输入.     3.优先按const的

C语言指针传递详解

传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问,要在某个函数中修改数据,需要用指针传递数据,当数据是需要修改 的指针的时候,就要传递指针的指针,传递参数(包括指针)的时候,传递的是它们的值,也就是说,传递给函数的是参数值的一个副本 本文将讨论C语言中指针传递给函数与从函数返回指针 本文地址:http://www.cnblogs.com/archimedes/p/c-transfer-point.html,转载请注明源地址. 用指针传递数据 用指针传递数据的一个主要原因是

Java中的值传递和引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言).    

Java中的值传递和引用传递实例介绍_java

复制代码 代码如下: package Object.reference; public class People {     private String name;     private int age;     public People(){     }     public People(String name, int age) {         super();         this.name = name;         this.age = age;     }    

详解C++编程中向函数传递引用参数的用法_C 语言

引用类型的函数参数向函数传递引用而非大型对象的效率通常更高. 这使编译器能够在保持已用于访问对象的语法的同时传递对象的地址. 请考虑以下使用了 Date 结构的示例: // reference_type_function_arguments.cpp struct Date { short DayOfWeek; short Month; short Day; short Year; }; // Create a Julian date of the form DDDYYYY // from a G

Java语言入门教程(九):Java语言中的值传递

在第八篇博文中,介绍了编写方法体必须了解的基本知识点,初学者已经可 以自己写简单的例子进行练习.在练习过程中,我们不可能把所有的代码都放在 main方法中,Java类一定会有或多或少的方法成员,调用这些方法将是必要的步 骤.而调用方法成员时,如果该方法有参数,就必须要传递实际参数给方法的形 式参数.所以了解Java语言中的值传递是非常必要的. Java中的数据类型分两种,基本数据类型和引用类型.所以本文中也将分别 对这两种数据类型的值传递特征进行介绍. 1.基本数据类型的值传递:基本数据类型传递