指针的数据类型

本篇所指内容,均已指针为例,如有不正之处,欢迎指出。
1、首先介绍两个标准函数begin和end:
为了让指针的使用更安全、简洁。c++11引入了以上两种函数,这两个函数与容器中的函数功能类似。不过数组不是类类型,因此两个函数并非成员函数,正确的使用形式是将数据作为参数,举例说明:
int ia[] = {0,1,2,3,4,5};
int *beg = begin(ia);
int *last = end(ia);
begin(): 返回ia首地址的指针(头指针)。
end(): 返回ia尾地址后一位的指针(尾后指针)。
使用的场景:以处理数组中的元素为例,寻找出元素中第一个负数。
while(beg != last && (*beg) >= 0)
{
++beg;
}
程序中通过比较beg和last来确保可以安全的对beg进行安全的解引用操作。特别注意一点,尾后指针不能进行解引用和递增的操作,否则会引起内存泄露的问题。

2、指针运算
以指向数组的指针为例,可以进行包括解引用、递增、比较、与整数相加,两个指针相减。
constexpr size_t sz = 5;
int arr[sz] = {1,2,3,4,5};
int *ip =arr; //等价于 int *ip = &arr[0]
int *ip2 =ip + 4; //指向的元素为arr[4]

给指针加上整数,得到的新指针需要指向同一数组的其他元素,或者数组尾指针的下一个位置(尾后指针)。
int *p = arr + sz; //使用警告,不能解引用
如果计算所得的结果超出以上范围,这种错误编译器一般不会发现。

两个指针相减的结果类型是一种名为ptrdiff_t的标准类型,和size_t一样,定义在cstddef头文件中机器相关的类型。差值可能是负数,因此为带符号的类型。
注意:两个空指针也可以相减,结果为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值