указатель на указатель как параметр функции - PullRequest
0 голосов
/ 08 мая 2020
 void print_first_n_row(double **matrix, int n, int row) {
   int i,j;
   double x;
   for(i=0;i<n;i++){
     for(j=0;j<row;j++){
       x=*(*(matrix+i)+j);
       printf("%lf",x); 
    }
    printf("\n");
  } 
}

Я не получаю вывода с этой забавой c. В чем может быть причина?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

В C массивы располагаются в памяти последовательно, строка за строкой, называемая основная строка , например, массив, созданный следующим образом:

int array[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};//4 rows of 3 columns

.. . хранится в памяти как:

|1|2|3|4|5|6|7|8|9|10|11|12|
|row 1|row 2|row 3| row 4  |

Итак, ваша функция , как написано , должна передавать n как количество строк для печати во втором аргументе (как это так), но укажите количество столбцов в третьем аргументе.

Измените это:

void print_first_n_row(double **matrix, int n, int row)  

на это:

void print_first_n_row(double **matrix, int n, int col)    

Я протестировал это изменение, создав [4][3] индексных доступных ячеек памяти с использованием выделенной памяти для: double **matrix; (4 указателя на двойные, каждый указывает на 3 двойных местоположения.) Затем заполнил каждое местоположение серией чисел и передал соответствующие аргументы:

int n = 4;
int col = 3;
void print_first_n_row(matrix, n, col);  

Я видел это:

enter image description here

Когда прошло:

int n = 2;
int col = 3;
void print_first_n_row(matrix, n, col);  

Я видел это:
enter image description here

Еще один предложение, как указано в комментариях:

Это:

x = matrix[i][j];  

Более читабельно, чем:

x=*(*(matrix+i)+j);
0 голосов
/ 08 мая 2020

«Я не получаю вывода»

Если вы не получили вывода, либо n, либо row (или даже оба) должен быть 0 или меньше 0, потому что, если бы он был другим, вы получите хотя бы один результат.

Проверьте значения, которые вы передаете в качестве аргументов в n и row в вызывающей функции .

Лично я предполагаю, что форма новой строки printf("\n"); печатается, но вы не заметили результат перевода строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...