C++复合类型(compound type)——引用和指针的区别

C++复合类型(compound type)——引用和指针的区别

1.引用即别名
声明语句中,类型名 &组成复合类型-引用,是对已存在的对象起了另外一个名字。

int i=1024;
int &ri=i;//&紧随类型名,因此是声明的部分,ri是对i的引用 
int &ri2;// 报错:未初始化 

&出现在表达式中时,为取址符

2.指针
声明语句中,类型名 *组成复合类型-指针
*出现在表达式中时,为解引用符

#include<iostream>
int main()
{
	int i = 1024,j=9;
	int* p;
	int* p1;
	p1 = &j;//p1初始化为指向j的指针(地址)
	p = &j;//p初始化为指向j的指针
	*p = i;//p指向的地址内的值赋为i=1024
	std::cout << *p<< " " << *p1<< std::endl;//此时p1和p指向的地址的值都变为1024
	return 0;
}

指针和引用的区别:
定义上来说:

  • 指针是指向其他任意类型;
  • 引用是对象的另一名称。

关键区别:

  1. 引用是对已存在的对象起另一个名字,指针是对象自己的地址;
  2. 一旦初始化,引用和初始化对象绑定,且无法解绑对其他对象引用,但是指针可以另分配或者复制;
  3. 引用一直绑定在初始化对象,但指针在其作用域可以指向数个不同的对象;
  4. 引用一定要初始化,指针定义时可以不初始化(但使用时最好初始化,否则出现难易预计的错误,对实在不清楚指向的指针,可以先初始化为nullptr或0)

特殊指针类型-void*
可存放任意对象的地址:

int i = 42;
void *p = &i;//合法,void*可任意对象类型
long *lp = &i;//不合法long*不能被int*赋值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值