有没有办法在两个步骤中声明一个2D整数数组?我有范围问题。这就是我想要做的事情:
//I know Java, so this is an example of what I am trying to replicate:
int Array[][];
Array = new int[10][10];
现在,在OBJ-C中我想做类似的事情,但我无法正确理解语法。现在我只有一步,但我不能在我目前拥有它的If-Statement之外使用它:
int Array[10][10]; //This is based on an example I found online, but I need
//to define the size on a seperate line than the allocation
任何人都可以帮我解决这个问题吗?我知道它可能是一个更基本的问题,但你不能在消息之外使用关键字“new”(据我所知),你不能发送消息到整数。 :(
* 编辑1: **
我的问题与范围有关。
//Declare Array Somehow
Array[][] //i know this isn't valid, but I need it without size
//if statement
if(condition)
Array[1][2]
else
Array[3][4]
//I need to access it outside of those IFs
//... later in code
Array[0][0] = 5;
答案 0 :(得分:4)
如果您知道其中一个边界的大小,这是我创建2D数组的首选方法:
int (*myArray)[dim2];
myArray = calloc(dim1, sizeof(*myArray));
它可以在一个电话中释放:
free(myArray);
不幸的是,必须修复其中一个边界才能使其正常工作。
但是,如果你不了解任何一个边界,这也应该有效:
static inline int **create2dArray(int w, int h)
{
size_t size = sizeof(int) * 2 + w * sizeof(int *);
int **arr = malloc(size);
int *sizes = (int *) arr;
sizes[0] = w;
sizes[1] = h;
arr = (int **) (sizes + 2);
for (int i = 0; i < w; i++)
{
arr[i] = calloc(h, sizeof(**arr));
}
return arr;
}
static inline void free2dArray(int **arr)
{
int *sizes = (int *) arr;
int w = sizes[-2];
int h = sizes[-1];
for (int i = 0; i < w; i++)
free(arr[i]);
free(&sizes[-2]);
}
答案 1 :(得分:0)
您展示的声明(例如int Array[10][10];
)是正常的,并且对于声明它的范围有效,如果您在类范围内执行它,那么它对整个类都有效。< / p>
如果数组的大小不同,请使用动态分配(例如malloc
和朋友)或使用NSMutableArray
(对于非原始数据类型)