C++数组和指针

数组和指针是C++的两种类似于vector和迭代器的低级复合类型。平时应当尽量使用vector和迭代器,只有在强调速度时才在类实现的内部使用数组和指针。

 

一、 数组

1、数组的缺点:长度固定,无法获取其容量大小。

2、没有所有元素都是引用的数组。

3、非const变量以及到运行阶段才知道其值的const变量都不能用于定义数组的维数。

4、数组下标的正确类型时size_t。

 

二、 指针

1、和迭代器一样,指针提供对其所指对象的间接访问,只是指针更通用。指针用于指向单个对象,而迭代器只能用于访问容器内的元素。

2、指针保存的是另一个对象的地址。

3、指针保存0值,表明它不指向任何对象。但在赋0值时,只能用0值常量表达式给指针赋值,如整型const对象,字面值常量0等。用int赋值时非法的。

4、Void*指针

可以保存任何类型对象的地址,void *表明该指针与一地址值相关,但不清楚存储在此地址上的对象的类型。支持的操作有限:

1)与另一指针比较

2)向函数传递void*指针或从函数返回void*指针。

3)给另一void*指针赋值

不允许使用void*操作它所指向的对象。5.12.4待续。

             

5、指针和引用的比较

1)引用总是指向某个对象,定义引用时没有初始化是错误的。

2)给引用赋值修改的是该引用所关联的对象的值。引用一经初始化,就始终指向同一个特定对象。

6、指针的减法

返回值是ptrdiff_t型,即signed型,表示两个指针之间的差距。

 

7、指针和const限定符

1)指向const对象的指针

Constdouble *ptr;  const限定的是ptr所指对象,而非ptr,允许对ptr重新赋值,但不能通过ptr修改所指对象的值。

 

使用const void *而不是void*保存const对象地址。

 

允许把非const对象的地址赋给指向const对象的指针,不能使用这个指针修改对象,但可以使用其他方法修改所指的对象。

 

在实际程序中,指向const的指针常用作函数的形参。以确保传递给函数的实际对象在函数中不因为形参而被修改。

 

2)const指针

intnum = 0;

int*const curErr = #

const指针的值不能修改。可以通过const指针修改所指对象。

 

3)指向const对象的const指针

1)+2)。

 

8、 创建动态数组

                1)   New/delete,占用的空间在堆,new表达式返回指向新分配数组的第一个元素的指针。

                2)   动态分配数组时,若是类类型,则使用默认构造函数初始化。若是内置类型,则无初始化。

                         也可以使用int *pia = new int[10]()初始化。

3)允许动态分配长度为0的空数组。对其不能进行解引用操作。允许比较和加减0操作。

 

 

三、C风格字符串

通过char*来操纵,使用指针的算数操作来遍历字符串。如char*s = “hello”,相当于先给字符串分配空间,然后将基地址赋给s。

应当避免使用,尽量使用string。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值