指针和引用的区别

来源:互联网 发布:阿里云盒子刷安卓系统 编辑:程序博客网 时间:2024/06/04 18:07

1.指针和引用的定义和性质区别:

(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。

(2)可以有const指针,但是没有const引用;

(3)指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)

(4)指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

(5)指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。

(6)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小;

(7)指针和引用的自增(++)运算意义不一样;


2.指针和引用作为函数参数进行传递时的区别:

(1)指针作为参数进行传递:

#include<iostream>using namespace std;void test(int *p){    int a=1;    p=&a;    cout<<p<<" "<<*p<<endl;}int main(void){    int *p=NULL;    test(p);    if(p==NULL)    cout<<"指针p为NULL"<<endl;    system("pause");    return 0;}

运行结果为:

0x22ff44 1指针p为NULL

当把指针作为参数进行传递时,也是将实参的一个拷贝传递给形参,即上面程序main函数中的p何test函数中使用的p不是同一个变量,存储2个变量p的单元也不相同(只是2个p指向同一个存储单元),那么在test函数中对p进行修改,并不会影响到main函数中的p的值。

(2)引用作为参数进行传递:

#include<iostream>using namespace std;void test(int &a){    cout<<&a<<" "<<a<<endl;}int main(void){    int a=1;    cout<<&a<<" "<<a<<endl;    test(a);    system("pause");    return 0;}

要同时修改指针以及指针指向的内容,可以利用指针的引用

#include<iostream>using namespace std;void test(int *&p){    int a=1;    p=&a;    cout<<p<<" "<<*p<<endl;}int main(void){    int *p=NULL;    test(p);    if(p!=NULL)    cout<<"指针p不为NULL"<<endl;    system("pause");    return 0;}

输出结果为:

0x22ff44 1指针p不为NULL

原文地址:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html

0 0
原创粉丝点击