каков правильный способ превратить столбец матрицы в один вектор на C?

#c #vector #matrix #dynamic-arrays

#c #вектор #матрица #dynamic-arrays

Вопрос:

 int *column_to_row(int **a, int rows, int column_index)
{
// a is a the matrix,rows are the number of rows in the matrix
//column_index is the chosen column of the matrix to be turned into a vector 
     int i;
     int *b=malloc(rows*sizeof(int));// b will be my returned vector
     if(b==NULL)
     {
          exit(EXIT_FAILURE);
     }    
     for(i=0;i<rows;i  )
     {
          b[i]=a[i][column_index];
     }
     return b;
}
  

Я продолжаю получать эту ошибку C2040:

error C2040: 'column_to_row' : 'int *(int **,int,int,int)' differs in levels of indirection from 'int ()'

Что я делаю не так?

Комментарии:

1. Можете ли вы показать код, который вызывает эту функцию?

2. В самом коде нет ничего (синтаксически) неправильного. Вы пытаетесь вызвать функцию до ее объявления (т. Е. выше в том же модуле компиляции / файле)?

3. Ваша ошибка показывает, что 4 параметра передаются в любой строке, в которой вы вызываете column_to_row. Можете ли вы показать фактический вызов? сам код функции кажется прекрасным.

4. у @MByD его еще нет

5. Кроме того (но это всего лишь некоторые незначительные вещи, не связанные с реальной проблемой): вы не должны exit() использовать вспомогательную функцию. Вместо этого верните NULL , чтобы вызывающий мог действовать соответствующим образом.

Ответ №1:

функция работает правильно.

скорее всего, он жалуется, потому что прототип отсутствует.

int *(int **,int,int,int) похоже, вызов функции не согласуется с объявлением, потому что это должно быть int*(int **, int ,int)