sizeof()不适用于传递对GLfloat []数组的引用

时间:2013-01-28 06:14:07

标签: objective-c c

  

可能重复:
  How to find the sizeof(a pointer pointing to an array)

我会尽量保持这种通用性,对于那些知道Objective-C的人来说,问题根深蒂固(或者可能只是在C?),并且我会在提供上下文的同时避免尽可能多的OpenGL。

我正在存储GLfloat数组中的3D对象的顶点数据,如此

GLfloat teapot[] = { 1.0, 0.0, .... 0.0 };

(为简洁省略了实际值)

我正在打这样的电话

[self drawObject:teapot];

用于像这样定义的方法

-(void) drawObject:(GLfloat *)object {

    NSLog(@"%ld %ld", sizeof(object), sizeof(teapot));
}

当然,目标是绘制内容,但它无法正常工作,因为sizeof(object)没有返回正确的值。 (我同样省略了所有绘图代码,因为它与此无关,除了它需要sizeof()使用glDrawArrays()

NSLog()的输出如下所示:

sizeof object = 4, sizeof teapot = 6336

显示传递的object的大小与直接调用teapot的大小不同。这很奇怪,因为引用工作正常,即glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, object)工作正常,所以它肯定是在对象中读取。目前,我还必须将对象的大小作为整数传递,以使glDrawArrays起作用,这有点俗气。传递的代码如下所示

[self drawObject:teapot ofSize:(int)sizeof(teapot)];

虽然我真的想避免传递附加参数。

有什么想法吗?谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

指针和数组不是一回事。不幸的是,您必须自己传递大小,作为额外参数,或作为结构或对象的一部分。

有用的阅读:http://c-faq.com/aryptr/aryparmsize.html