【发布时间】:2012-03-18 03:59:07
【问题描述】:
我已经阅读了一段时间,但我不确定我是否找到了一个好的答案。
我正在尝试设置一个包含 92 个结构的数组。它是固定长度,不会改变,因为它实际上是一个查找表。我认为最好的方法是先用calloc分配内存,然后加载数据。
但是经过一些阅读,我看到很多人直接分配内存而没有像这样calloc 或malloc
myStruct myData[92] = { {1,2}, {3,4}, ....};
我的第一个问题是动态分配内存是否更好?我的理解是这是一个更好的解决方案。特别是如果数据不一定会一直被使用。
我的第二个问题是关于初始化数据。我读过我可以使用... = {....}; 初始化结构,但编译器不接受。
这是我目前的代码:
typedef struct {
int a;
int b;
} myStruct;
@implementation MyClass
static myStruct *myData;
-(id) init {
// ...
myData = (myStruct *) calloc(92, sizeof(myStruct));
myData[0] = {1,2}; // <=== Error ! Compiler says "Expected expression!"
// ...
【问题讨论】:
-
myData[0]=... 是一个赋值,而不是初始化。不幸的是,初始化语法不允许赋值。
-
既然可以进行静态分配,为什么还要使用动态分配?
static myStruct myData[92] -
这是我想要理解的事情之一。我认为最好对未知事物进行动态处理,而静态是固定的。所以我最初的动态代码应该是静态的,即使它(相对而言)很大?
标签: objective-c arrays memory-management struct calloc