Вы не можете это исправить. Тип matrix
равен int **
. Тип &matrixx[0][0]
является int *
. Это несовместимо.
Ваш «хороший вид назначения» является правильным подходом, если вы хотите поддерживать механизм массива указателей. Тем не менее, у вас есть синтаксис для него немного неправильно; должно быть:
for (int i=0; i<3; i++) {
///good kind of assignment
matrix[i] = matrixx[i];
}
Кроме того, вам не нужен цикл, который делает это:
for (int i=0; i<3; i++)
{
matrix[i] = malloc(sizeof(int)*3);
}
(Вы получите утечку памяти, когда @Chris укажет ниже, как только вы переназначите эти указатели.) Если, конечно, вы не собираетесь скопировать содержимое матрицы. В этом случае ваш подход определенно неверен.
[Обратите внимание, что вы нигде не звоните free()
, что означает утечку памяти.]