Objective c sizeOf Struct和sizeOf实例变量返回不同的值
我正在Objective-C中使用一个C Api。这个Api需要使用一些特定的结构。 我在试图弄清楚如何使用结构数组时遇到了一些问题 我将通过一些代码向您展示更多内容: 我有一个类Objective c sizeOf Struct和sizeOf实例变量返回不同的值,objective-c,Objective C,我正在Objective-C中使用一个C Api。这个Api需要使用一些特定的结构。 我在试图弄清楚如何使用结构数组时遇到了一些问题 我将通过一些代码向您展示更多内容: 我有一个类Sprite,在这个类中我定义了结构Vertex。 精灵的每个实例都有自己的顶点数组 #import <Foundation/Foundation.h> typedef struct { float Position[3]; float Color[4]; } Vertex; @in
Sprite
,在这个类中我定义了结构Vertex
。
精灵的每个实例都有自己的顶点数组
#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
现在,如果我直接在vertices2
结构上执行sizeOf
,我得到值112
,然后在spr.vertices上执行sizeOf
,我得到4
。为什么?我的意思是,这是一个具有相同值的结构
我怀疑我使用数组[]和指针*的方式不对
如何修改Sprite类以正确使用结构数组?spr.vertices
是一个指针。vertices2
是顶点对象的实际数组。它们是不同的数据类型。spr。顶点是指针。vertices2
是顶点对象的实际数组。它们是不同的数据类型。sizeof
在编译时计算其参数的大小。如果向其传递指针,它将返回指针类型的大小(通常为4或8字节)。即使向其传递一个取消引用的指针,即sizeof(*spr.vertices)
,也将获得顶点
类型的大小,而不是特定实例的大小
如果您需要在运行时知道实例的大小,请将其(大小)放入另一个ivar。sizeof
在编译时计算其参数的大小。如果向其传递指针,它将返回指针类型的大小(通常为4或8字节)。即使向其传递一个取消引用的指针,即sizeof(*spr.vertices)
,也将获得顶点
类型的大小,而不是特定实例的大小
如果您需要在运行时知道实例的大小,请将其(大小)放入另一个ivar。好的,那么如何将数组添加为类Sprite的实例变量?我无法编写@interface Sprite:NSObject{Vertex _texts[];}
如果您知道大小,可以在数组声明中指定它。即顶点\u顶点[4]
。如果有可变长度数组,则需要存储指向顶点数组和数组长度的指针,并执行sizeof(Vertex)*arrayLenOk,那么如何将数组添加为类Sprite的实例变量?我无法编写@interface Sprite:NSObject{Vertex _texts[];}
如果您知道大小,可以在数组声明中指定它。即顶点\u顶点[4]
。如果有可变长度数组,则需要存储指向顶点数组和数组长度的指针,并确保在编译时不会始终计算sizeof(顶点)*arrayLensizeof
;例如,使用可变长度数组。不过,这不是其中之一。sizeof
并不总是在编译时计算;例如,使用可变长度数组。不过,这不是那种情况。
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;