首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基本的指针运算把我难住了

基本的指针运算把我难住了
EN

Stack Overflow用户
提问于 2012-04-04 01:57:57
回答 3查看 94关注 0票数 0

我正在解决一个使用指针算法的问题,我找到了一小段可以工作的代码。不过,我不太明白它到底在做什么。对我来说,它看起来像是将buffer的地址+ ix3的值赋给数组元素ai。我不知道为什么这会与我的程序相关。有人能告诉我在这个循环中到底发生了什么吗?

代码语言:javascript
复制
int *buffer=new int[5*3];

for (i=0;i<5;i++)
    a[i] = buffer+i*3;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-04 02:00:03

表达式

代码语言:javascript
复制
buffer+i*3

等同于

代码语言:javascript
复制
&buffer[i*3]

所以你的假设是正确的,我希望a[]是一个指针数组。

请注意,像buffer+k这样的指针算法不会将buffer中包含的地址值加上k:相反,它等于&buffer[k]的值,该值应该等于buffer中包含的地址值+k*sizeof(缓冲区指向的类型)。

票数 2
EN

Stack Overflow用户

发布于 2012-04-04 02:10:08

它完全按照你说的做。数组a (您没有展示它的定义)可能具有int* [5]类型。

这样做的目的是启用正常的双索引(即不需要不断地执行索引运算)。要了解这一点,请考虑如果访问a[1][2]会发生什么。在上面的循环之后,a[1]包含值buffer + 3,即它指向buffer的第四个元素(将n添加到指针会将指针n元素向前移动)。所以a[1][2](buffer+3)[2]是一样的,它访问的值比buffer+3指向的位置多两个元素,换句话说,它等同于buffer[5]

更一般地,在这个初始化之后,a[i][k]访问与buffer[3*i+k]相同的元素(当然,除非i大于4 )。

票数 2
EN

Stack Overflow用户

发布于 2012-04-04 02:00:07

buffer+i*3;只是实现&buffer[i*3];的一种间接方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9998734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档