Если бы основной метод не был бы статичен, необходимо было бы создать объект основного класса снаружи программы. Как Вы хотели бы сделать это?
В CI будет использоваться массив указателей.
Например:
int *jagged[5];
jagged[0] = malloc(sizeof(int) * 10);
jagged[1] = malloc(sizeof(int) * 3);
и т. Д. И т. Д.
Есть несколько способов сделать это. Вот другой способ:
int jagged_row0[] = {0,1};
int jagged_row1[] = {1,2,3};
int *jagged[] = { jagged_row0, jagged_row1 };
Если вы просто хотите его инициализировать, вы можете сказать:
int jagged[][3] = { {0,1}, {1,2,3} };
, но массив все равно будет иметь форму [2] [3]. Если вам нужен настоящий массив с зазубринами, вам придется создавать его динамически. И если вы это сделаете и используете C ++, вы должны использовать std :: vector
, как предлагает friol.
В C ++ (не скомпилировано, и, вероятно, есть более компактный синтаксис):
std::vector<std::vector<int> > myArray;
myArray.push_back(std::vector<int>());
myArray.push_back(std::vector<int>());
myArray[0].push_back(0);
myArray[0].push_back(1);
myArray[1].push_back(1);
myArray[1].push_back(2);
myArray[1].push_back(3);
Итак теперь вы можете получить доступ к элементам, например, с помощью myArray [0] [0] и т. д.
In C99 you can do the following:
int jagged_row0[] = {0,1};
int jagged_row1[] = {1,2,3};
int (*jagged[])[] = { &jagged_row0, &jagged_row1 }; // note the ampersand
// also since compound literals are lvalues ...
int (*jagged2[])[] = { &(int[]){0,1}, &(int[]){1,2,3} };
The only difference here (as compared to rampion's answer) is that the arrays don't decay to pointers and one has to access the individual arrays via another level of indirection - (e.g. *jagged[0]
- and the size of each row has to be recorded - i.e. sizeof(*jagged[0])
will not compile) - but they're jagged-appearing to the bone ;)
Причина, по которой вы получили ошибку, заключается в том, что вы должны указать границы, по крайней мере, для внешнего измерения; т.е.
int jagged[][3] = {{0,1},{1,2,3}};
Вы не можете сделать jagged [0] двухэлементным массивом int, а jagged [1] - трехэлементным массивом int; N-элементный массив - это тип, отличный от M-элементного массива (где N! = M), и все элементы массива должны быть одного типа.
То, что вы можете сделать, - это то, что другие предлагали выше, и создать зазубренный массив указателей на int; таким образом каждый элемент может указывать на целочисленные массивы разных размеров:
int row0[] = {0,1};
int row1[] = {1,2,3};
int *jagged[] = {row0, row1};
Несмотря на то, что row0 и row1 относятся к разным типам (двухэлементные и трехэлементные массивы int), в контексте инициализатора они оба неявно преобразуются в того же типа (int *).