0

重複
の可能性: sizeof (配列を指すポインター) を見つける方法

問題の根源である 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()( forを使用する必要があることを除いて、ここでは関係がないため、同様にすべての描画コードを省略しました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)];

一方、追加のパラメーターを渡すことは本当に避けたいと思います。

何か案は?御時間ありがとうございます。

4

1 に答える 1

3

ポインタと配列は同じものではありません。残念ながら、追加のパラメーターとして、または構造やオブジェクトの一部として、サイズを自分で渡す必要があります。

参考資料: http://c-faq.com/aryptr/aryparmsize.html

于 2013-01-28T06:16:13.247 に答える