指针和引用那些事
2016-07-01
指针和引用的概念:
指针:变量的内存地址,是一个常量;
引用:一个已定义变量别名;
指针和引用区别:
(1)指针是一个地址,指向内存中一块存储单元,它的值可以发生变化,可以指向其他存储单元;引用是一个变量别名,和原来变量是同一个东西,即在内存中占有同一存储单元,被编译器实现为const指针,并且不可被多次初始化(重定义);
话不多说,看下面例子:
void test1() { int b=1; int &b1=b; cout<< "&b:"<<&b<<endl; cout<< "&b1:"<<&b1<<endl; }
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}; }