2014-10-29 3 views
0

Я создал двухмерный массив в C, используя распределение динамической памяти.Передача 2-мерного массива, созданного с использованием динамического распределения памяти

int **x; 

x=(int **)malloc(2*sizeof(int)); 

for(i=0;i<k;i++) 

x[i]=(int*)malloc(K*sizeof(int)); 

Теперь передадим этот массив как параметр функции Sum.

Sum(x); 

В функции Sum(int *x[]), размерность в квадратных скобках не может быть оставлена ​​пустой, и я не могу инициализировать с параметром, который изменяется динамически либо.

Не могли бы вы показать мне решение этой проблемы.

+0

Я Бесполезный 't проверить эту ссылку до – phanitej

+0

'x = (int **) malloc (2 * sizeof (int));' -> 'x = (int **) malloc (k * sizeof (int *));' – BLUEPIXY

ответ

0

В функции Sum(int *x[]), размерность в квадратных скобках не может оставить пустой

Конечно, это может; в контексте объявления параметра функции, T a[N] и T a[] интерпретируются как T *a; все три объявляют a как указатель на T, а не как массив T.

Вам необходимо пройти размерность массива в виде отдельных параметров, в любом случае, так что Sum может выполнять свою работу должным образом, но вы можете, конечно, объявить x, как int *x[] или даже int **x.

Если вы используете C99 компилятор или C2011 компилятор, который поддерживает Влас, вы можете использовать переменную среды выполнения для размера массива:

int Sum(size_t cols, int *x[cols]) 

или даже

int Sum(size_t rows, size_t cols, int x[rows][cols]) 
Смежные вопросы