Я хочу передать матрицу функции в C. Если я хочу сделать размер матрицы непостоянным (например, позволить пользователю вставить с клавиатуры измерение NxM), у меня нет проблем в этом.Однако, когда я пытаюсь передать это функции, я сталкиваюсь с некоторыми проблемами:
- Номер столбца ДОЛЖЕН быть указан в заголовке функции (функций), у которой матрица является параметром.Если я опускаю это значение, я получаю:
ошибка: тип массива имеет неполный тип элемента 'int []' void trasposeMatrix (int M [] [], int n, int m) esercizi.c:282: 25: примечание: объявление 'M' как многомерного массива должно иметь границы для всех измерений, кроме первого
с этой функцией:
void trasposeMatrix(int M[][],int n,int m)
{
int temp=0;
int M2[n][m];
printf("La matrice prima della trasposizione è: \n");
printMatrix(M,3,3);
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
M2[i][j]=M[j][i];
}
}
printf("La matrice dopo la trasposizione è: \n");
printMatrix(M2,3,3);
}
с этим вызовом:
trasposeMatrix(M,3,3);
-Это значение ДОЛЖНО быть постоянным, в противном случае, если я поставлю параметр в качестве значения в этих скобках, я получу эту ошибку:
esercizi.c: На верхнем уровне: esercizi.c: 282: 29: ошибка: здесь не объявлено 'm' (не в функции) void trasposeMatrix (int M [] [m], int n, int m)
с тем же вызовом иэтот код:
void trasposeMatrix(int M[][m],int n,int m)
{
int temp=0;
int M2[n][m];
printf("La matrice prima della trasposizione è: \n");
printMatrix(M,3,3);
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
M2[i][j]=M[j][i];
}
}
printf("La matrice dopo la trasposizione è: \n");
printMatrix(M2,3,3);
}
Этого можно избежать, используя константы для указания размеров матрицы.Однако мне не нравится этот вид "ограничения".Наконец, что если я распечатал бы матрицу с помощью функции: что я должен написать в заголовке функции, если размер является переменной ??Функция, которую я написал для печати матрицы, хорошо работает для матрицы 3x3, но что делать для матриц 2x2 и для 3x4.Может быть, вы получили точку
Примечание: это не происходит с массивами, где я просто пишу заголовок вроде: void printArray(int a[], int dimension){}
, и это работает.Я не знаю почему.Возможно, это дизайнерское поведение C, решенное его изобретателем, но я надеюсь, что это не так, потому что это так tediuos
Примечание 2: :) Я использую linux mint с gcc (Ubuntu 7.3.0-27ubuntu1 ~ 18.04) 7.3.0, но с VS для Win10 я даже не могу поместить переменную в качестве измерения массива: (
Мне очень жаль очень длинное сообщение, но я надеюсь получить ответ. Спасибо за чтение