指针和引用

转自:http://zhidao.baidu.com/question/321717839.html&__bd_tkn__=6bf970203e3f81274d57e177eca620f38d0b91a08078338d51fed8133ea5c69d362ad36bb4bcda3b39bb3949f6bbe47087ac3af56e60b1f4e7eb60157b5efc359c60a1fb570f03de0125277add44ba7d4d029a03795fc888d3444278722d3329c4630a354bb7aea2ec09f4accbdc8c0ace3424f346a0

1.从内存上来讲  系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。

2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。

3.所以引用访问对象是直接访问。指针访问对象是间接访问。

4。如果pa是指针,那么*pa就是引用了。

但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。程序如下:

#include<stdio.h>

void pt(int * pta,int * ptb)//指针只是拷贝,实参不会发生改变

{

int *ptc;

ptc=pta;pta=ptb;ptb=ptc;

}

void ref(int &ra,int &rb)//引用不会拷贝,而是直接访问

{

int rc;

rc=ra;ra=rb;rb=rc;

}

void main()

{

int a=3;int b=4;

int *pa=&a;int *pb=&b;

pt(pa,pb);

printf("zhizhen: a=%d,b=%d\n",a,b);

ref(a,b);

printf("yinyong: a=%d,b=%d\n",a,b);

}

输出结果如下图:

 

此外,常量引用:

const引用是指向const对象的引用:

const int ival = 1024;
const int &refVal = ival; // ok: both reference and object are const
常量引用的值是不允许改变的
int &ref2 = ival; // error: nonconst reference to a const object


本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012

时间: 2025-01-12 02:43:58

指针和引用的相关文章

详解Java中的指针、引用及对象的clone

对象|详解 Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象.本文会让你了解什么是影子clone与深度clone,认识它们的区别.优点及缺点.看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的

C++中指针的引用详解

指针(*)和引用(&),解引用(*)和取地址(&), 主要观察是在左面, 还是在右面, 如果在左面是前者, 在右面是后者; 如果比较多, 则要认真观察, 譬如int*&, 就是指针的引用, 可以避免指针内部元素的复制; 还有其他的一些形式, 见下面的例子; 代码: /* * test.cpp * * Created on: 2013.11.12 * Author: Caroline */ /*eclipse cdt; gcc 4.7.1*/ #include <iostrea

More Effective C++:指针与引用的区别

指针与引用看上去完全不同(指针用操作符'*'和'->',引用使用操作符'.'),但是它们似乎有相同的功能.指针与引用都是让你间接引用其他对象.你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用.一个引用必须总是指向某些对象.因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量.相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明

c语言,形参是指针的引用,和形参是指针,两者结果不同,求指点

问题描述 c语言,形参是指针的引用,和形参是指针,两者结果不同,求指点 自定义的头文件 typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; 如下是使用形参是指针的引用的函数,结果是正确的 #include "BiTree.h" #include "stdlib.h" #include "stdio.h" bool Delete

MFC控件指针公用释放方法[void* | 指针的引用]

前言 看见重复的代码就想封装,这个习惯转入C++之后也没改,即使效率有所影响也尽力去封装,比如在类的析构函数里面释放指针,一个个判断然后一个个delete然后再设置为NULL,就想着写一个公用释放指针的方法,也就有了下面的问题一.   文章 1.  C++返回引用类型 指针的引用   正文 一.问题函数 本意:传入一个指针,判断指针是否为空,不为空的话就释放掉,这样在析构函数里面不用一段段重复写函数内的那段代码,封装后只用写如"FreeObj(pBtnSave);"就可以了. BOOL

C++中的指针与引用、如何参数传递

C++语言中,函数的参数和返回值的传递方式有3种:引用传递.指针传递和值传递. 1.引用传递 引用传递传递的是引用对象的内存地址. 引用传递的特点是:被调函数对形参的任何操作都会影响主调函数中的实参变量. 举例说明: #include<iostream> using namespace std; void swap3(int &p,int &q) { int temp; temp =p; p=q; q=temp; cout<<p<<" &quo

向函数中传递指针和传递指针的引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针:但 是对于传递指针应用,如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象,这样就会造成内存泄漏,因为原来指针指向的地方已经不能再 引用了,即使没有将传递进来的指针指向新的对象,而是在函数结束的时候释放了指针,那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了   看个例子: #incl

C++中的指针与引用详细解读

1.指针和引用的定义 在深入介绍之前我们首先来看一下指针和引用的定义.指针和引用的区别,然后分别针对指针和引用展开讨论,深入细节为何有这些差异. 指针的权威定义: In a declaration T D where D has the form * cv-qualifier-seqopt D1 And the type of the identifier in the declaration T D1 is "derived-declarator-type-list T", then

c语言-有关结构体及结构体指针的引用

问题描述 有关结构体及结构体指针的引用 (假如结构体 student 里定义了 int double.. 定义了一个结构体指针stu 并且分配了内存 请问输入成员变量时是否内存溢出 以及 读取指针后面内存数据的方式是由编译器控制的吗 解决方案 12321321321321asdasdsdasdsdasdasd21321321313qwasdadasdde2131323 解决方案二: 我的上传资料有几个你可以看一看. 解决方案三: 结构体&&指针c语言结构体自引用指针结构体指针的定义和引用

汇编-c/c++ 函数调用中形参为指针或者引用对栈操作问题

问题描述 c/c++ 函数调用中形参为指针或者引用对栈操作问题 问题引出: 当我们的函数参数为普通变量或指针时,我们在调用过程中会拷贝一个副本,而当形参为引用时不会拷贝一个副本. 当形参为普通变量时,会拷贝一个变量备份,当为指针时会拷贝一个指针备份,指针指向的内容不会拷贝 问题来了: 查看使用指针和使用引用的方式调用的函数的汇编代码,会发现在汇编代码层面实现方式是一模一样的,都是: lea eax,[i](假设i是整形变量) push eax 而使用值传递方式是: mov eax,dword p