指针和引用的概念:
指针:变量的内存地址,是一个常量;
引用:一个已定义变量别名;
指针和引用区别:
(1)指针是一个地址,指向内存中一块存储单元,它的值可以发生变化,可以指向其他存储单元;引用是一个变量别名,和原来变量是同一个东西,即在内存中占有同一存储单元,被编译器实现为const指针,并且不可被多次初始化(重定义);
话不多说,看下面例子:
void test1()
{
int b=1;
int &b1=b;
cout<< "&b:"<<&b<<endl;
cout<< "&b1:"<<&b1<<endl;
}
(2)使用指针时可以不初始化,即为空;使用引用时必须初始化.
void test2()
{
int *p;
int &a;
}
(3)指针有多级,可以有指针的指针(二级指针),即int **p;但引用只有一级,没有引用的引用;
void test3()
{
int **p=NULL ;
int a=1;
int &&a1=a;
}
(4)指针和引用的自增(++)运算意义不一样;指针自增表示指针指向内存下一块存储单元,引用自增表示变量的自增;
void test4()
{
int b=1;
cout<< "b:"<<b<<endl;
int &b1=b;
b1++;
cout<< "b1:"<<b1<<endl;
int a[3]={1,2,3};
cout<< "&a:"<<&a<<endl;
int *p=a;
p++;
cout<< "&p:"<<&p<<endl;
}
(5)sizeof运算引用的是引用变量的大小,sizeof运算指针的是指针本身大小;
void test5()
{
char *p=NULL ;
char c=1;
char &c1=c;
cout<< sizeof(p)<<endl;
cout<< sizeof(c1)<<endl;
}
(6)可以建立指针数组,但不可以创建引用数组;
void test6()
{
int *p[10]={0};
int &a[10]={0};
}
指针比引用灵活,引用比指针安全;