指针和引用初理解

1. 指针是变量,指针变量的值是内存单元的地址,也可以说指针是内存单元的地址。

如下图所示:指针p指向变量n. p的值就是变量n的地址。我们只要掌握了变量n的地址(也就是它的指针p),就可以在任何地方对其内存单元进行操作。

也可以这么理解,指针变量也是一个变量。

指针变量的值:p = 0x22f.               是另一个变量n的地址

指针变量的地址:&p = 0xff68.         是二维指针变量的的值 ,假设int **p2=&p

指针变量指向的值: *p=3.               是另一变量的值3

int n=3;    int *p=&n;    *p=4;     cout<<n<<endl;

2.引用是某块内存的别名。

引用是C++中的概念,注意这里的&不是取地址。以下程序中,n 是m 的一个引用(reference),m是被引用物(referent)。

int m;    int &n=m;

 n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n就是m 它自己。-----林锐高质量C++编程

int m=3;   int &n=m;    n=5;   cout<<m<<endl;

 3.指针与引用的区别

1、非空区别。任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象,但指针可以为空;因此如果使用一个变量让他指向一个对象,但是该变量某些时候可不能不指向任何对象,应该把变量声明为指针。如果,变量不为空,可以把变量声明为引用。


2,合法性区别。在使用引用指尖不需要测试它的合法性。相反,在使用指针之前最好先先进行测试,避免其指向NULL。


3.可修改区别。指针可以被修改指向另外一个不同的对象,而引用则总是指向其在初始化时被指定的对象。
#include<iostream>
using namespace std;
int main(void)
{
    int a=10,b=1000;
    int &rInt=a;//rInt引用a,rInt等于10;
    rInt=b;//将b赋值给变量a,注意这里不非让rInt改变初衷引用b
    rInt=30;//改变rInt还是改变a.
    cout<<"a="<<a<<endl;

    int k=10,m=20;
    int *p=&k;//p指向a,可以通过操作p,来改变k
    p=&m;//改变了p的指向,之后改变p就对k,没有影响了。
    *p=30;
    cout<<"k="<<k<<endl;//k还是10;
    getchar();
}
4.应用区别。如果总是指向一个对象并且一旦指向后就不会改变指向,此时应该使用引用。反之推荐使用指针。

总之:引用是变量的别名,不为空,一旦成为变量的别名就永远是那个变量的别名。
   指针是变量地址,指向变量,可以为空,用之前要检查非空,可以改变指向。


 

 

posted @ 2014-07-08 09:58  北门吹风  阅读(192)  评论(0编辑  收藏  举报