指针和引用区别

来源:互联网 发布:linux 拷贝文件 编辑:程序博客网 时间:2024/06/03 11:08

指针和引用的定义和性质区别:
指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;
而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。
而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。
指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;
指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了。
从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。

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

include

using namespace std;
void swap(int *a,int *b)
{
  int temp=*a;
  *a=*b;
  *b=temp;
}
int main(void)
{
  int a=1,b=2;
  swap(&a,&b);
  cout<

include

using namespace std;
void test(int *p)
{
  int a=1;
  p=&a;
  cout<

include

using namespace std;
void test(int &a)
{
  cout<<&a<<” “<

include

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

0 0