指针和引用作为参数的区别

  - 当直接传递变量给一个函数的时候 , 实际上传递的是这个变量的copy, 修改这个copy不会影响到原来的变量.

  - 当传递一个指向这个变量的指针到函数的时候, 实际上传递的是这个指针的copy, 修改这个copy不会影响到原来的指针所指的位置, 但是修改这个copy内的值就影响了指针指向的变量的值.

 1 #include <iostream>
 2 using namespace std;
 3 int s = 1,t = 2;
 4 void foo(int *p){
 5     p = &s;
 6 }
 7 int main(){
 8     int * p = &t;
 9     cout<<*p<<endl;
10     foo(p);
11     cout<<*p<<endl;
12     return 0;
13 }

  - 当传递一个引用到一个函数的时候, 就是直接对这个引用所对应的变量直接进行修改(引用在定义时必须初始化, 不能更改为其他变量的引用).

  - 当传递一个指针的引用时. 对这个参数的修改, 就相当于是修改原指针, 可以改变指针所指的位置和位置上的内容, 但是不能修改引用的指针.

 1 #include <iostream>
 2 using namespace std;
 3 int s = 1,t = 2;
 4 void foo(int*& p){
 5     p = &s;
 6 }
 7 int main(){
 8     int * p = &t;
 9     cout<<*p<<endl;
10     foo(p);
11     cout<<*p<<endl;
12     return 0;
13 }

  - 当传递一个指针的指针的时候......

  - 总结: 实际上除了引用之外, 参数都是要做备份的, 函数外面的备份和里面用到copy实际上不是同一个. 引用就是直接使用原来的.

 

时间: 2024-10-18 23:43:43

指针和引用作为参数的区别的相关文章

关于内存的划分和传引用传参数的区别

1.堆 2.栈 空间较小 3.全局 4.代码段 要搞懂每个区域放什么东西 堆 复杂类型栈 变量静 代 复杂类型对象没有指针指的时候,堆中的内容垃圾回收 1函数传对象的时候,其实是首先在堆里面开一个内存放对象属性内容,在栈里面开一个内存放一个变量,变量里面放地址,指向堆的那个对象,传对象的时候,是在栈里面再开一个内存,里面的内容是刚才那个指向对象的栈变量的地址,也是指向堆的那个对象,函数返回的时候,这个赋值过来的指针断开.在函数里面的修改也会对原来对象产生变化. 2而传引用对象进去的时候,用的还是

为什么基类指针和引用可以指向派生类对象,但是反过来不行?

为什么基类指针和引用可以指向派生类对象,但是反过来不行? 基类指针和引用 BaseClass *pbase = NULL; DerivedClass dclass; pbase = & dclass; 基类指针和引用可以指向派生类对象,但是无法使用不存在于基类只存在于派生类的元素.(所以我们需要虚函数和纯虚函数) 原因是这样的: 在内存中,一个基类类型的指针是覆盖N个单位长度的内存空间. 当其指向派生类的时候,由于派生类元素在内存中堆放是:前N个是基类的元素,N之后的是派生类的元素. 于是基类的

1. 指针和引用

一.为什么使用指针 ①指针能够有效的表示数据结构. ②能动态分配内存,实现内存的自由管理. ③能方便地使用字符串. ④指针直接与数据的存储地址有关.比如:值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算.而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高.(这里形参的改变会影响实参的值) 二.指针和引用的区别 1.指针是一个变量,存储的是一个内存地址,指向内存的一个存储单元,即指针是一个实体. 引用和被引用的变量是一个东西,只不过是原变量的一个别名

指针的引用——在函数中的巧妙应用

前面有一篇文章讲了指针与引用.并且还提到不能定义指向引用的指针(因为引用不是对象,没有实际的地址).那么,能否定义指针的引用呢?答案是肯定的,因为指针本身就是一个对象.即然是对象,就能定义一个引用邦定该对象.先来看看指针的引用的用法: 以int类型为例如下: void ReferencePointer() { int i = 5; // 变量i int* p = &i; // 指针p,指向变量i int*& pr = p; // 指针的引用,与p指向同一个变量i cout <<

(C/C++)区别:数组与指针,指针与引用

1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存.指针远比数组灵活,但也更危险. 数组和指针特点的简单比较: 数组 指针 保存数据 保存地址 直接访问数据 间接访问数据,先取得指针的内容,然后以它为地址取得数据 用于存储数目固定且类型相同的数据 通常用于动态数据结构 编译器自动分配和删除

指针与引用的区别

相同点: 1.     指针与引用都是地址的概念.指针指向一块内存,指针的内容是所指向内存的地址:而引用则是某块内存的别名. 2.     引用在语言内部用指针实现. 3.     一般把引用理解为指针,不会犯严重语义错误.引用操作可以看做是受限的指针(仅允许取内容操作). 不同点: 1.     指针逻辑上是独立的,可以改变指针的内容,也可以改变指针指向的内存中的内容:而引用只是一个别名,在逻辑上不上独立的,它的存在具有依附性,必须在声明时就初始化,而且引用的对象在整个生命周期中时不能被改变的

指针与引用的区别以及引用的三种用法

1.指针与引用的区别: 指针是一块内存的地址值,而引用是一块内存的别名. 下面引自:http://www.cnblogs.com/kingln/articles/1129114.html 从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一

浅谈C++中指针和引用的区别

指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址. 而下面2句定义了一

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a