C++基础的不能再基础的学习笔记——复合类型

复合类型

复合类型基于其他类型定义的类型。

C++中最常用的复合类型是引用指针

一、引用

引用是给对象起的别名,它代表了对象,但它不是一个对象

一般在变量初始化时,初始值会被拷贝到新建的对象中,然而在定义引用时,程序将引用和它的初始值绑定在一起,一旦初始化完成,引用将和它的初始对象一直绑定在一起,无法令引用重新绑定到另一对象,因此引用必须初始化

引用的类型要与绑定的对象类型严格匹配,且只能绑定在对象上,不能绑定字面值(const除外)。

格式为: type &引用名 = type类型的对象名;

二、指针
1. 指针与引用的不同
\指针引用
自身类型对象别名
初始化可以不初始化必须初始化
是否可以表示不同对象
2.指针的定义

指针存放的是某个对象的地址

  • 无初始化的定义 格式: type *指针名;
  • 有初始化的定义 格式: type *指针名 = & type类型的对象; &为取地址符,获取当前对象的地址;
  • 空指针的定义     格式: type  *指针名 = 0;
                                         type  *指针名 = NULL;
                                         type  *指针名 = nullptr;

以上定义空指针的三种方法,都是将0赋值给指针。其中最常用的是nullptr,它是一种特殊类型的字面值,可以被转换成任意指针类型。

建议在定义指针时初始化所有指针,防止程序因未初始化指针而崩溃。例如:指针未被初始化,分配给指针的内存中有数据,则该数据会被当做是地址值。访问该指针,则会访问本不该去访问的地址。

3.利用指针访问对象

我们利用解引用符*来访问被指针指向的对象(若指针没有赋值,则不能解引用)。

*p(p为指针名)的含义为:p所指向的地址内的元素。

4.void*指针

void*是一种特殊类型的指针,可以指向任意类型的对象。

格式:    void *指针名 = &任意类型;

但是,由于不知道指针指向对象的类型,我们无法对对象进行操作(包括取出对象)。

三、复合类型的定义
1.定义多个变量

在定义复合类型的多个变量时,容易产生误解。首先,要知道,变量声明是由 基本数据类型声明符组成的。

例如:int* p1,p2;  在这条语句中,int为基本数据类型,*是修饰p1的类型修饰符,对p2没有任何影响。因此,这条语句声明了int类型的指针p1、变量p2。

2.指针的指针

通过修饰符*的个数可以区分指针的级别。相对的,在解引用时也要根据需要调整解引用符的个数。

int a = 10;
int *b = &a;
// c为指针b的指针
int **c = &b;
 
std::cout << **c << std::endl;
3.指针的引用
int i = 42;
int *p;
// r为指针p的引用
int *&r = p;

面对一条复杂的指针或引用声明语句时,将变量名定为起点,从右向左读,离变量名最近的修饰符影响该变量的类型,其余剩下的为该变量引用或指向的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值