我正在使用Objective-C中的C Api。此API需要使用某些特定结构。 我试图弄清楚如何使用结构数组时遇到一些问题。
我用一些代码向您展示了更多内容:
我有一个类Sprite
,我在其中定义了结构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类: 我创建了一个Vertex数组,并将此结构分配给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
结构上执行vertices2
,我会在112
上获得值sizeOf
并执行spr.vertices
,我会4
。为什么???我的意思是这是具有相同值的相同结构。
我怀疑是我正在使用array []和指针*以错误的方式...
如何修改Sprite类以正确的方式使用struct数组?
答案 0 :(得分:2)
spr.vertices
是一个指针。 vertices2
是Vertex对象的实际数组。它们是不同的数据类型。
答案 1 :(得分:2)
sizeof
在编译时计算其参数的大小。如果传递一个指针,它将返回指针类型的大小(通常为4或8个字节)。即使你传递了一个解除引用的指针,即sizeof(*spr.vertices)
,你也会获得Vertex
类型的大小,而不是你的特定实例。
如果您需要在运行时知道实例的大小,请将其(大小)放在另一个ivar中。