指针算术和导航malloc'ed数组

时间:2009-08-06 22:58:11

标签: c arrays pointers pointer-arithmetic

好的,我正在为iPhone开发一个OpenGL ES应用程序,我遇到了一个有趣的问题。

我有一个函数可以根据细节水平和球坐标范围计算球体的顶点,法线和纹理坐标。

最初,在数组中存储顶点看起来像这样:

//After I figure out the size of the vertices:
GLfloat* vertices = (GLfloat *) (malloc(sizeof(GLfloat) * arraySize)));

//Later on when I'm computing vertices...
GLfloat* vertPosition = vertices;

vertPosition[0] = px;
vertPosition[1] = py;
vertPosition[2] = pz;
vertPosition += 3;

这结果是一场灾难。我最终得到了像AT& T标志的东西。 :-)还有一点工作,我发现添加一个计数器并使用它来索引数组修复了所有内容:

vertPosition[(vertexCount * 3) + 0] = px;
vertPosition[(vertexCount * 3) + 1] = py;
vertPosition[(vertexCount * 3) + 2] = pz;
vertexCount++;

我的问题是:使用临时指针并向前移动会发生什么?我现在的效率是多少,还是指针算法更好?

1 个答案:

答案 0 :(得分:2)

从您发布的内容来看,它应该完全相同。我能想到的第一件事就是错误是你代码中的其他地方。

我能想到的唯一另一件事是,如果不是采用一个顶点数组,它实际上可能需要一个coords数组,而coords可能在它们中有填充,那么这也可以解释其中的差异。