让我难过的基本指针算法

时间:2012-04-03 17:57:57

标签: c++ arrays pointers memory-management

我正在研究一个使用指针算法的问题,我发现这个小代码段可行。我不清楚它到底在做什么。对我来说,它似乎是将缓冲区的地址+ ix3的值分配给数组元素a [i]。我不知道为什么那会与我的节目有关。有人可以告诉我这个循环中到底发生了什么吗?

int *buffer=new int[5*3];

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

3 个答案:

答案 0 :(得分:2)

表达式

buffer+i*3

相同
&buffer[i*3]

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

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

答案 1 :(得分:2)

它完全符合您的要求。数组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 :(得分:0)

buffer+i*3;只是执行&buffer[i*3];的迂回方式。