C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

5——数组、指针和字符串
数组
数组是具有一定顺序关系的若干对象的集合体。
数组是自定义的数据类型。
数组的存储: 数组元素在内存中是顺序、连续存储的。

对象数组
数组元素不仅可以是基本类型,也可以是 自定义类型。

指针
C++从C中继承过来的重要数据类型。
指针也是一种数据类型,指针变量是用于存放内存单元地址。
通过变量名访问一个变量是直接的,而通过指针访问一个变量是间接的。

与地址相关的运算
* 和 &
*成为指针运算符也成为解析dereference,表示获取指针所指向的数据的值
&为取地址运算符,用来得到一个对象的地址。
注意: *和&出现在声明语句和执行语句中其含义是不相同的。
int *p //声明一个指针变量
cout << *p //输出指针p所指向的内容

int &rf  //声明一个int型的引用
int *pa = &b  //取出对象的地址

指针的赋值
声明指针之后必须先赋值,然后才可以引用。
两种形式
1. int *i_ptr ; i_ptr = & i;
2. int *i_ptr = &i;

关于指针的类型应注意:
可以声明指向常量的指针,此时不能通过指针来改变所指对象的值。
const char *name1 = "John";

可以声明指针类型的常量
char *const name2 = "John";

void类型的指针可以存储任何类型的对象地址。通过强制类型转换可以访问任何类型的数据。

指针运算:
指针也是一种数据类型,可以参与部分运算,算术运算,关系运算,赋值运算。
一般来讲,指针的算术运算是和数组的使用相联系。
为什么需要将一个指针设置为空指针,有时声明一个指针,并没有一个确定的地址值可以赋给它,当程序运行到某个时刻才会将这个地址赋给这个指针。从指针诞生到他有特定值之前是一个随机值,这样会有很大的风险。

指针数组:
如果一个数组的每个元素都是指针变量。
一个二维数组相当于一个一维的指针数组。

指针型函数
当一个函数的返回值是指针类型时,这个函数就是指针型函数。使用指针型函数的最主要的目的就是要在函数结束时把大量的数据从被调函数返回主调函数。
int * func() ;

指向函数的指针
函数指针就是专门用来存放函数代码首地址的变量。在程序中可以像使用函数名一样使用指向函数的指针来调用函数。与函数名有同样的作用。
声明一个函数指针时,也需要说明函数的返回值以及形参列表。

对象指针
与一般变量不同,对象所占据的内存空间只是存放数据成员,函数成员不在每一个对象中存储副本。

this指针
this指针时隐含与每一个类的成员函数的特殊指针,用于指向正在被成员函数操作的对象。
this指针明确指出了成员函数当前所操作的数据所属的对象。
实际过程是,当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数。

指向类的非静态成员的指针
类的成员自身也是一些变量、函数或者对象等。
指向对象成员的指针使用前也要先声明在赋值,然后引用。
int Point::*xx  (类型说明符 类名::*指针名)
int (Point:: *GetX)() ( 类型说明符 (类名::*指针名)(参数表))

赋值:
指针名 = &类名::数据成员名
对于一个普通变量,用 &可以得到其地址,但是对于类的成员来说相对复杂一些,类的说明只是确定了各个数据成员的类型,所占内存的大小以及它们的相对位置,在声明时并不为数据成员分配具体的地址。上述赋值之后只是说明了被赋值的指针是专门用于指向哪个数据成员。同时指针中存放该数据成员的相对位置(相对于起始地址的偏移量)
由于类是通过对象而实例化的,在声明类的对象时才会为具体的对象分配内存空间,只要将对象在内存中的起始地址与成员指针存放的相对偏移量结合起来就可以访问。
指针名 = &类名::函数成员名
用类的对象来调用该指针。

指向类的静态成员的指针
类的静态成员的访问不依赖于对象,可以用普通的指针来指向和访问静态成员。

动态分配内存
new delete

深拷贝与浅拷贝
默认的拷贝构造函数完成的是浅拷贝。
在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个新增加的指针指向新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误。

字符串
用字符数组储存和处理字符串
string类
使用数组来存放字符串,调用系统函数来处理字符串,不是很方便。
为此,C++标准类库提供了字符串类。string类提供了对字符串进行处理所需要的操作。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值