C++指针加整数、两个指针相减的问题

说来惭愧,写C++有一段时间了。这个问题从来没有认真考虑过,此次标记于此:


考虑如下问题:

1     char a[20];

2     int *ptr = (int *)a;

3     ptr++;


第3句ptr++实际为ptr右移一个int空间(即4个字节)的距离,此时ptr指向a[4]。

若第3句改为

int *p = ptr + 2;

则p指向a[8]

这里说明当指针加整数时,指针向后偏移的距离看的是声明该指针的类型(此处即int),而非指向的实际类型(此处即char)!!!


另外,如果我就是想在第3句处得到a后面一个字节的地址怎么办?

可以这样:

void *p = a;

p = p + 1;

(这里注意:c++不允许p++或++p)


void类型的指针加整数,即为指针实际向后偏移的字节数。


同理,若

int *pa0 = (int *)&a[0];

int *pa4 = (int *)&a[4];

std::size_t s = pa4 - pa0;

则s等于1


那么如果

int *pa3 = (int *)&a[3];

int *pa5 = (int *)&a[5];

std::size_t s2 = pa3 - pa0;

std::size_t s3 = pa5 - pa0;

这里的s2,s3又分别等于多少呢,

是的,如你所想:s2等于0,s3等于1


可见,同类指针(当然也只有同类指针允许相减,如pa3和pa0)相减得到的整数值,等于两指针减的距离除以sizeof(声明指针的类型),然后取整(此处即static_cast<int>((pa3 - pa0) / sizeof(int)))。

发布了52 篇原创文章 · 获赞 86 · 访问量 133万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览