我正在解决一个使用指针算法的问题,我找到了一小段可以工作的代码。不过,我不太明白它到底在做什么。对我来说,它看起来像是将buffer的地址+ ix3的值赋给数组元素ai。我不知道为什么这会与我的程序相关。有人能告诉我在这个循环中到底发生了什么吗?
int *buffer=new int[5*3];
for (i=0;i<5;i++)
a[i] = buffer+i*3;发布于 2012-04-04 02:00:03
表达式
buffer+i*3等同于
&buffer[i*3]所以你的假设是正确的,我希望a[]是一个指针数组。
请注意,像buffer+k这样的指针算法不会将buffer中包含的地址值加上k:相反,它等于&buffer[k]的值,该值应该等于buffer中包含的地址值+k*sizeof(缓冲区指向的类型)。
发布于 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 )。
发布于 2012-04-04 02:00:07
buffer+i*3;只是实现&buffer[i*3];的一种间接方式。
https://stackoverflow.com/questions/9998734
复制相似问题