C++学习之路(复合数据类型,引用与指针1)

本文深入探讨了C++中的指针与引用概念,详细解释了两者的区别与联系,包括它们的初始化、使用场景及注意事项。通过具体示例说明了如何正确地使用指针与引用,并强调了初始化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前学习C语言就头疼指针,java目前学习的方向对指针的作用也仅仅是new对象在堆中,参数传递在堆栈段而已。

引用

引用必须初始化
eg:

int a=1024;
int &A=a;
int &A1//错误,未初始化

一般初始化变量,初始值会被拷贝到新建对象。引用是将初始化值与引用绑定

引用并非对象,相反的,他只是为一个已经存在的对象起了一个别名

A=2;//把2赋值给指向a的对象,即a=2
int b=A;与b=a一致。

引用不是对象,所以不能定义引用的引用。

引用只能绑定到对象上,而不能绑定到字面值与某个表达式结果。

指针

指针是指向另一个类型的复合类型。与引用不同在于,指针本身是一个对象,允许对指针的拷贝与赋值,而且在指针的生命周期中,它可以先后指向不同的对象,其二,指针无需赋初值,未付初值时也会有默认初值。

int *pi,*p2;//指向int类型的指针

获取对象地址
运用取地址符&

int a=	42;
int *p=a;//

指针必须匹配指针(除两种特殊情况)

double dval;
int *pi=pd;//值不能赋地址
pi=&dval;//地址不能赋给值

指针的值 (即地址)应属下列4种状态:

1.指向一个对象。
2.指向一个对象的下一个临接位置。
3.空指针,未指向任何一个对象。
4.无效指针,也就是上述提到的其他值。

利用指针访问对象
如果指针指向了一个对象,则允许使用解引用符(操作符*)来访问对象:

int ival=42;
int *p=&ival;//p存放着变量ival的地址,或者说p指向变量ival的指针
cout<<*p;//*符号得到指针P的对象,输出42.
*p=0;
cout<<*p;

空指针
空指针不指向任何一个对象,在试图使用一个指针之前代码可以首先检查是否为空。生成空指针的方法:

int *p1=nullptr;
int *p2=0;
//首先需要#include cstdlib
int *p3=null;

NULL预处理变量,不属于std命名空间,它由预处理机负责管理,所以无需加std::。

建议初始化所有指针,因为一旦未指定,指针所指所占的内存空间会被看做是一个地址值,访问该指针,相当于访问一个本不存在的位置上的不存在的对象,如果所占空间恰好有内容,内容被当成地址,无法分辨是否合法与非法。

赋值和指针

引用和指针都能间接访问对象,但是引用不是对象,和最初的对象进行绑定后,每次对引用的访问都是访问他最初的对象。

赋值永远改变的是等号左边的对象

void*指针
void指针是一个特殊指针,它可以存放任意对象的地址,一个void指针存放着一个地址,这一点和其他指针类似,不同的是,我们对该地址到底存放什么对象并不了解。
函数输入输出不能用void*指针,因为我们不知道他存放的是什么值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值