0

我正在使用 Objective-C 中的 C Api。这个 API 需要使用一些特定的结构。我在试图弄清楚如何使用结构数组时遇到了一些问题。

我用一些代码向您展示了更多内容:

我有Sprite我定义 struct的类Vertex。Sprite 的每个实例都有自己的顶点数组。

#import <Foundation/Foundation.h>  

typedef struct {
    float Position[3];
    float Color[4];
} Vertex;

@interface Sprite : NSObject{
    Vertex *_vertices;
}

//Getter setter methods 
-(void)setVertices:(Vertex*)vx;
-(Vertex*)vertices;
@end

在另一个类中,我以这种方式使用 Sprite 类:我创建一个顶点数组并将这个结构分配给 Sprite 的一个实例:

Sprite *spr = [[Sprite alloc]init];

Vertex vertices2[] = {
    {{1, -1, 0}, {1, 0, 0, 1}},
    {{1, 1, 0}, {1, 0, 0, 1}},
    {{-1, 1, 0}, {1, 1, 0, 1}},
    {{-1, -1, 0}, {1, 1, 0, 1}}
};

spr.vertices = vertices2;

现在,如果我sizeOf直接在vertices2struct上112执行,我会得到 value 并sizeOfspr.vertices我得到4. 为什么???我的意思是这是具有相同值的相同结构。

我怀疑我正在以错误的方式使用 array[] 和 pointer* ...

如何修改 Sprite 类以正确使用结构数组?

4

2 回答 2

2

sizeof在编译时计算其参数的大小。如果你传给它一个指针,它会返回指针类型的大小(通常是 4 或 8 个字节)。即使您向它传递一个取消引用的指针,即sizeof(*spr.vertices),您将获得Vertex类型的大小,而不是您的特定实例。

如果您需要在运行时知道实例的大小,请将其(大小)放在另一个 ivar 中。

于 2013-04-17T20:16:29.680 回答
2

spr.vertices是一个指针。这vertices2是您的 Vertex 对象的实际数组。它们是不同的数据类型。

于 2013-04-17T19:55:17.283 回答