有没有更快捷的方法将以下数据转换为c样式指针数组?
GLfloat verticalLines [] = {
0.59, 0.66, 0.0,
0.59, -0.14, 0.0
}
我目前的方法是使用以下方法手动迭代数据:
-(GLfloat *)updateLineVertices{
int totalVertices = 6;
GLfloat *lineVertices = (GLfloat *)malloc(sizeof(GLfloat) * (totalVertices));
for (int i = 0; i<totalVertices; i++) {
lineVertices[i] = verticalLines[i];
}
return lineVertices;
}
一些额外的信息。 最终,我将需要一种易于操作的格式的数据,例如:
-(void)scaleLineAnimation{
GLfloat *lineVertices = [self updateLineVertices];
for (int i = 0; i<totalVertices; i+=3) {
lineVertices[i+1] += 0.5; //scale y axis
}
}
答案 0 :(得分:1)
这取决于verticalLines是否会坚持到底。如果它被定义为高于它并且它不会改变,你可以放弃整个malloc并且只需将lineVertices指向它。
linesVertices = &verticalLines[0]
如果verticalLines要改变,你可能想要自己的副本,所以你别无选择,只能将实际数据从内存的一部分复制到另一部分,就像你说的那样,这可能是一个更优雅
for (int i = 0; i<totalVertices; i++){
lineVertices[i] = verticalLines[i];
}
或者首选方法可能是使用memcopy(),这里有一些工作代码
//MemcopyTest.c
#include <cstdlib>
#include <stdio.h>
#include <string.h>
int main(){
float a[] = {1.0,2.0,3.0}; //Original Array
int size = sizeof(float)*3;
float *b = (float*)malloc(size); //Allocate New Array
memcpy(b, a, size); //Copy Data
for(int i = 0; i<3; i++){
printf("%f\n", b[i]);
}
free(b);
}
答案 1 :(得分:0)
直接使用verticalLines
有什么问题?类型为T ident[n]
的任何内容都可以隐式转换为T* ident
,就像您已编写&ident[0]
一样。如果你真的想要明确,你可以直接写&ident[0]
。