2015-11-21 4 views
1

Следующая функция должна заполнить двумерный массив с поплавками увеличивается на 0,5Заполнение C массив указателей

void MatrixFill(float *pf, float x, int rows, int columns, FILE *fp) { 
    int i, j; 
    printf ("\n***\tBegin MatrixFill\t***\n\n"); 
    fprintf (fp, "\n***\tBegin MatrixFill\t***\n\n"); 
    for (i = 0; i < rows; i++) { 
     for (j = 0; j < columns; j++) { 
      *(pf + i + columns) = x; 
      x += 0.5; 
     } 
    }  
    printf ("\n***\tEnd MatrixFill\t***\n\n"); 
    fprintf (fp, "\n***\tEnd MatrixFill\t***\n\n"); 
} 

Однако, я не уверен, что происходит в моей «заполняющего заявление.» (*(pf+stuff)=x;)

Любая помощь с указателями/заполнением массива будет отличной. Спасибо!

+0

Ну, это '(пф + I + J * строки)' а Я не очень хорошо объясняю. –

+2

В вашем коде нет 2D-массива. – Olaf

+0

Я думаю, что он только что вставил функцию в программу @Olaf – Cherubim

ответ

1

это ты был у бардак: (pf + i + columns) = x должно быть: *(pf + i + j * rows)

Почему?

Во-первых, вы должны видеть, что каждая строка проходит через все колонки:

 col1|col2|col3 
    ----+----+---- 
row1  | | 
    ----+----+---- 

Теперь вы видите, если вы хотите, чтобы грести число х, вы должны пройти через все столбцы х раз!

Вообще говоря

в каждом 2D массива arr[COLS][ROWS] где COLS и ROWS являются общее число столбцов и строк, следовательно, arr[i][j] = arr[i + j * COLS] = arr[j + i * ROWS]

Смежные вопросы