Для этого вам понадобится указатель на int. C не имеет двухмерного массива bultin, но у вас есть способы обойти это. У вас есть два варианта здесь:
симулировать 2D массив через вспомогательную функцию
либо вы симулировать 2-ое измерение; Я предлагаю вспомогательную функцию для этой цели, что-то вроде:
int getTwoDimensionArray(int ** array, int rowSize, int x, int y)
{
return (*array)[x + y*rowSize];
}
void setTwoDimensionArray(int ** array, int rowSize, int x, int y, int value)
{
(*array)[x + y*rowSize] = value;
}
Пусть говорят, что вы хотите, чтобы выделить массив 5x7 динамически, вы будете использовать эти функции, как, например:
Сначала выделить массив 1D:
int * myArray = (int*) malloc(5*7);
После того, как вы бы установить значение 10 в положении х = 2, Y = 2, как, что setTwoDimensionArray (& myArray, 5, 2, 2, 10);
И позже, если вы хотите получить обратно значение: INT значение = getTwoDimensionArray (& MyArray, 5, 2, 2);
Есть массив массивов так имитации 2D-массиву
int getTwoDimensionArray(int ** array, int rowSize, int x, int y)
{
return (*array)[x][y];
}
void setTwoDimensionArray(int ** array, int rowSize, int x, int y, int value)
{
(*array)[x][y] = value;
}
Распределение массива массива:
int ** myArray = (int**) malloc(5);
for (int i=0; i<5; ++i)
{
myArray[i] = (int*) malloc(7);
}
Вы бы использовать вспомогательные функции так же, как вы делали с вариант № 1
setTwoDimensionArray(&myArray, 5, 2, 2, 10);
int value = getTwoDimensionArray(&myArray, 5, 2, 2);
C++
Конечно, если вы можете использовать C++, у вас есть больше возможностей, см Multidimensional Containers in C++
Вы не можете объявить 'int numbers [];' без инициализатора для компилятора, чтобы определить, насколько он большой. Как вы планируете инициализировать 2D-массив? – dbush
Два наиболее распространенных способа сделать это - использовать 1-мерный массив, а затем вычислить индекс, например 'i + j * inner_len', или использовать массив указателей или указатель на блок указателей. Вы также можете сделать указатель на неизвестные массивы размера, но будьте осторожны, если вы это сделаете. Вы должны использовать круглые скобки, такие как 'int (* numbers) [];', и тогда вы действительно не можете делать 'numbers [i]', потому что sizeof (int []) не является надлежащим размером внутреннего массива, поэтому вы должны либо вычислять смещения по-разному, либо отбрасывать в правильный полный тип, например '((int (*) [inner_len])). – hacatu
Вы не можете сделать это с помощью массивов. длина массива должна быть известна во время компиляции. То, что вы ищете, это список какого-то рода. –