`
墙头上一根草
  • 浏览: 154668 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

c++ 值传递 指针传递 引用传递

    博客分类:
  • c++
阅读更多

      c++ 函数的参数传递方式有值,指针以及引用三种方式,具体的区别是前两种其实都是值传递,只不过指针是以指针地址值的形式传递的,值传递时,形参是实参的副本,即函数中对形参的修改不会影响到实参的实际值,可以这样理解,值和指针传递的参数,实参具有不变性。但是引用是可变的,即函数中对形参的修改实参会跟着改变,值和指针的方式是C语言继承过来的,但是引用为C++新的特性,综上所述,如果函数中的形参是一个大的对象时,如果用值传递,显然会浪费内存空间,因为值传递会copy一个实参的副本,而指针同样也会copy只不过copy的是地址,相对来说小一点,但是引用最合适,因为不参加其他的操作,唯一不足的是要分清特点,如果不想修改引用的值,则最好把形参声明为const,具有不变性。一下为例子。供参考

 

       

#include "stdafx.h"
#include <iostream>
using namespace std;

void swap1(int a,int b);//值传递
void swap2(int *a,int *b);//指针传递
void swap3(int &a,int &b);

int main(){
	int x = 1,y=2;
	swap1(x,y);

	cout<<"x:"<<x<<"X的原来地址为:"<<&x<<endl;

	swap2(&x,&y);

	cout<<"x的地址值:"<<&x<<endl;

	swap3(x,y);

	cout<<"x的引用值:"<<x<<endl;
	system("pause");


	return 0;
}

void swap1(int a,int  b){

	if(a !=0 && b!=0){
		int swap;

		swap =a;

		a = b;

		b=swap;

		cout<<"a:"<<a<<endl;
		
	}

}

void swap2(int *a,int  *b){

	if(a!=0&&b!=0){
		int *swap=a;
		a = b;
		b = swap;
		cout<<"a的值:"<<a<<endl;
	}
}

void swap3(int &a,int  &b){

	if(a!=0&&b!=0){
		int &swap=a;
		a = b;
		b = swap;
		cout<<"a的引用值:"<<a<<endl;
	}
}

    运行后的值为:

   

a:2
x:1X的原来地址为:001BF33C
a的值:001BF334
x的地址值:001BF33C
a的引用值:2
x的引用值:2
请按任意键继续. . .

 

分享到:
评论

相关推荐

    值传递,指针传递,引用传递的区别,内含可运行代码和详细解释

    总结:在实际使用中,值传递一方面会占用内存空间,内置类型还好(int等),如果是类(class)类型,赋值可能会是很大一笔...而对于指针传递,则在涉及数组的情况下使用较多,因为指针本身会给代码增加复杂性,难维护性

    C++ 与C#之间的指针参数传递传参参考

    C++ 与C#之间的指针参数传递,实现无限量数据的传递,轻松无压力,方便在C++里面获取或者从C#传递数据到C++的动态库调用内。

    C++指针与引用的区别

    C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。 值传递 void Func1(int x){x = x + 10;} int n = 0; Func1(n); cout “n = ” ; // n = 0 指针传递 void Func2(int *x){(* x)...

    指针传递和引用传递的区别

    在函数参数传递方面,指针传递参数实际上是值传递的一种形式,传递的是变量的地址值。这意味着在函数内部对指针的操作不会影响到原始变量,除非通过指针间接修改它所指向的对象。如果想要通过指针参数改变主调函数中...

    c++按引用传递

    C++语言中,函数的参数传递方式有三种:值传递、指针传递和引用传递。 值传递是将参数的值复制一份传递给函数,函数对参数的修改不会影响外部变量。例如,void Func1(int x){x = x + 10;}这里,x是外部变量n的一份...

    java及C++中传值传递、引用传递和指针方式的理解

    C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的不可变性,引用传递和指针传递则提供了更高的灵活性,允许直接修改原始对象。在编写代码时,理解...

    java及C++中传值传递、引用传递和指针方式的理解.docx

    本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用传递以及C++中的指针传递,并通过具体的代码示例来帮助理解这些概念。 #### 值传递 值传递是最简单的参数传递方式之一,它指...

    C++指针参数传递内存详解

    C++中的指针参数传递是一种常见的编程技术,但是许多开发者对其机理不甚了解,本文将深入剖析C++指针参数传递的内存机理,解决开发者们长期以来对函数指针参数传递的误解。 函数指针参数传递的机理 ---------------...

    C++引用传递.

    - **无需解引用**:使用引用时无需像使用指针那样进行额外的操作(如`*`或`-&gt;`),可以直接通过引用访问其对应的值。 - **效率更高**:当处理大型对象时,使用引用传递可以避免复制整个对象的成本,从而提高程序的...

    C++指针—指针讲解.ppt"

    2. 函数可以有多个返回值,通过指针传递。 3. 动态内存分配,例如使用`new`关键字分配内存,指针保存分配的内存起始地址。 4. 实现动态数据结构,如链表、队列、堆栈和树,这些都需要通过指针来跟踪和操作内存中的...

    C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值

    本话题聚焦于C#如何调用C++生成的DLL,并且接收返回的结构体引用或结构体指针,从而获取和处理多个值。下面我们将详细讨论这一过程。 首先,我们需要理解C++和C#之间数据类型的映射。在C++中,结构体可以直接作为...

    C/C++中多维数组指针作为函数参数传递程序

    C/C++中多维数组指针作为函数参数传递程序 在 C++ 中,多维数组指针作为函数参数传递是非常常见的编程技术。本文将详细介绍如何在 C/C++ 中将多维数组指针作为函数参数传递,並对相关知识点进行详细解释。 多维...

    c++中参数传递方式讨论

    与值传递不同,指针传递传递的是实参的地址,而不是其实值。因此,函数可以通过这个地址直接访问和修改实参的值,这在需要修改实参的情况下非常有用。例如: ```cpp void swap(int* pa, int* pb) { int temp = *pa...

    c++高阶指针与引用的实例(有代码)

    在C++编程语言中,高阶指针和引用是两种重要的高级特性,它们极大地扩展了对内存和对象的操纵能力。本实验通过两个实例详细介绍了这两种概念及其在实际编程中的应用。 首先,我们来看第一个实例,它涉及到了二级...

    C++中引用传递与指针传递的区别(面试常见)

    "C++中引用传递与指针传递的区别" C++中引用传递与指针传递是两个不同的概念,它们都是C++编程语言中的基本概念,但是它们之间存在着明显的区别。 首先,指针是变量,独立的,它可以被改变的,包括指针变量的值...

    C++指针与指针数组的两个实例 可运行

    指针是C++高效编程的关键工具,尤其是在处理大型数据结构、动态内存分配以及函数参数传递时。本篇将通过两个实例深入探讨指针与指针数组的应用。 首先,我们来看"指针.cpp"这个文件。在这个文件中,可能包含了一个...

    C++数组与指针深入剖析

    例如,在函数调用中传递数组时,实际上是传递了一个指向数组的指针。 #### 五、数组与指针的区别 虽然数组和指针在很多方面相似,但它们还是有一些重要的区别: 1. **类型不同**: 数组是一个数据结构,用于存储...

    C++指针与引用

    如果我们希望函数外部也能感知到这个变化,简单的指针传递是不够的,因为函数内的修改只影响局部变量,不会影响到外部的原始指针。此时,使用指针引用就显得尤为重要了。 例如,如果我们想要在函数`func1`中更新`...

    C++函数的指针

    在C++编程语言中,函数的指针是一个非常强大的特性,它允许我们将函数作为一个值来处理,例如存储、传递和调用。这个概念是面向过程编程中的一个关键元素,尤其在设计模式如策略模式或者回调函数中发挥着重要作用。...

Global site tag (gtag.js) - Google Analytics