指针和引用都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;而引用则是指向某块内存的别名。
不同点:
1、引用访问一个变量是直接访问的,二指针是间接访问。
2、指针是一个实体有自己的内存,而引用仅是个别名,本身不单独分配自己的内存空间
3、指针可以为空;引用不能为空,引用在开始时就绑定了一个内存空间,在定义时必须初始化,所以它只能是这个内存空间的名字,之后不可变,内存空间的值是可变的;
例如:
int i=3,j=4;
int &x=i;//称为i的别名
x=j;//x仍然引用i,只是修改了x与i共享的内存空间的值
4、引用没有const,指针有const,const的指针不可变
5、“sizeof引用”得到的是所指向的变量(对象)的大小, 而“sizeof指针”得到 的是指针本身的大小;
6、指针和引用的自增(++)运算意义不一样;
例如:
int a[]={1,2};
int *pa=a;
int pb=&a;
pa++表示指针向后移动一个int长度,指向下一个内存地址即pa[0]->pa[1]
pb++表示的是pb[0]的值++即将pb[0]=1—>pb[0]=2;
7、引用的健壮性远大于指针;引用是类型安全的,而指针不是,引用比指针多了类型检查
8、在结构体中,不能引用自身的一个联名,但可以指针指向自己;
typedef struct BtNode
{
BtNode *left;//√
BtNode &left;//×
};
指针与引用的区别
最新推荐文章于 2022-11-09 15:21:33 发布