C++学习笔记(二)指针及引用

【【2023最新版C++】实战项目教程,清华武老师带你零基础一套快速学会c++】 https://www.bilibili.com/video/BV1eL41187JS/?share_source=copy_web&vd_source=6ecc92141938badce449ff0f5edde584


1.指针

访问内存的最小单元是字节,数据保存在内存中具有连续编号的一串字节中。

指针保存的信息是另外一个数据对象在内存中的地址,通过指针可以访问到指向的那个对象。

(1)指针的定义

int* p1;//指向int类型数据的指针

long* p2;//指向long类型数据的指针

sizeof(p1)指地址的长度,与所指数据类型无关(64位系统8字节,32位系统4字节)

(2)指针的用法

1)获取对象地址给指针赋值

取地址操作符&

2)通过指针访问对象

解引用操作符“*” *p

(3)无效指针、空指针和void*

1)无效指针

未初始化的指针进行解引用和赋值

int* p1; *p1=100;//可能将100赋值到不可操作的地址上

2)空指针

定义方式为:

int* np= nullptr;

np = NULL;

np = 0;

3)void* p

该指针可指向任意类型的数据,但不可以进行解引用*p操作,因为不知道指向的数据类型,也就不知道数据的长度

(4)指向指针的指针

** 二级指针,即该指针指向一个类型为指针的数据对象,***三级指针

解引用操作也相应为:* (指向的指针)**(指向的指针所指向的数据)

(5)指针和const(关键:const和*的位置)

1)指向常量的指针 

const int c1 = 10;

int* pc = &c1;//错误

const int *pc = &c1;//正确

*pc不可改,pc可改

2)指针常量

int i;

int* const cp = &i;//cp为常量

cp不可改,*cp(cp地址所指向的数据非常量)可改变

3)const int * const p;

(6)指针和数组

输出数组名arr,实际为&arr[0]

int* pia = arr; //√ *pia即arr[0]

指针加1:实际加的是一个数据长度

(7)指针数组和数组指针

1)指针数组
数组,数组的所有元素为相同类型的指针

int* pa[5];//5个元素均为int*

2)数组指针

int (* ap)[5];//ap为指针,指向包含五个元素的数组

一个指向数组的指针

arr为数组名

ap=arr;//右边arr为int*,左边ap为指向数组的指针,故不正确,应使用&arr(?理解)

ap= &arr; *ap = arr;//*ap为arr,即arr[0]地址,**ap为arr[0]

2.引用

为数据对象另外起个名字,引用的本质是别名,并不是数据对象,不会存储数据,不占内存空间。

变量前加“&”,注意与对变量取地址区分,此处用于声明变量

(1)定义声明

int a;

int& ref = a;//必须初始化,ref=a,与a进行绑定,对ref操作也即对a操作

(2)对常量的引用

const int zero = 0;

相应的引用:

const int& cref = zero;//与常量一样,也不能进行赋值

可以用常量引用 普通变量,此时无法通过该引用常量来修改普通变量的值:
int i;

const int& ref = i;

ref =10;//错误

(3)引用和指针常量

绑定指针的引用

int* ptr = &a;

int*& pref = ptr

没有int &* 指向引用的指针

3.应用案例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值