Objective c sizeOf Struct和sizeOf实例变量返回不同的值

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

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

我将通过一些代码向您展示更多内容:

我有一个类
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(顶点)*arrayLen
sizeof
;例如,使用可变长度数组。不过,这不是其中之一。
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;