2017-02-16 8 views
0

Предположит, я инициализирован матрицу со следующим:Инициализация матрицы указателем на указатель?

double** m = (double**) calloc(count, sizeof(*double)); 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double)); 
} 

Теперь я хочу передать эту матрицу в функцию со следующим заявлением:

double func(void* params) 

является следующим правильным путем, чтобы получить матрица от параметров:

double** m = *(double**) params; 

Тогда я могу просто получить доступ к элементам в обычном режиме? Например.

double a = m[1][2]; 
+0

Это, как правило, считается плохой форме, чтобы изменить вопрос таким образом, чтобы аннулировать существующие ответы. – EOF

+0

Я вижу, извините, я думал, что это не относится к моему вопросу и что это только опечатка. Но я понимаю. –

ответ

1

Для начала этот фрагмент кода

double** m = (double**) calloc(count, sizeof(double)); 
             ^^^^^^^^^^^^^ 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double*)); 
             ^^^^^^^^^^^^^^^ 
} 

является недействительным.

Я думаю, что вы имеете в виду

double** m = (double**) calloc(count, sizeof(double *)); 
             ^^^^^^^^^^^^^^^^ 
for (int i = 0; i < count; i++){ 
     *(m+i) = (double*) calloc(count, sizeof(double)); 
             ^^^^^^^^^^^^^ 
} 

Эта функция декларации

double func(void* params); 

не имеет смысла. Размер массива (матрицы) неизвестен. Вы должны указать размер.

Функция может быть объявлена ​​как

double func(void* params, int size); 

и внутри функции вы можете написать

double **a = params; 

и использовать такие выражения, как

a[i][j] 

, где я и J принадлежит диапазону [0, count)

и вызовите функцию как

func(m, count); 
1

Вы не сказали, как вы называете эту функцию. Но если вызов func(m) то код в функции будет double** m = params;

код вы вывесили является нарушением constaint (присвоение double * к double **).