У меня возникли некоторые проблемы с этим, и я искал в Интернете «высоко» и «низко», но безрезультатно.
Я в основном пытаюсь создать случайную матрицу и распечатать ее, у меня есть функция double random()
, которая работает и была протестирована, и я определил структуру следующим образом:
typedef struct matrep {
unsigned rows, columns;
double *data;
} MATRIX;
, для которого я правильно выделил память, я использую эту и мою случайную функцию для создания случайной матрицы, но в результате получается, что указатель никогда не перемещается,
MATRIX *rand_matrix( MATRIX *mat )
{
for ( int i=0; i < mat->rows; i++ )
{
for ( int j=0; j < mat->columns; j++ )
{
*(mat->data) = random() ;
}
}
return mat ;
}
Я знаю, что он никогда не движется, потому что, когда я распечатываю матрицу, используя эту функцию
void print_matrix(MATRIX *mat )
{
int i, j ;
if ( (mat->data)==0 || (mat->rows)==0 || (mat->columns)==0 )
{
printf("Empty matrix\n" );
return ;
}
printf( "\n\nMatrix of dimensions %d x %d\n\n", mat->rows, mat->columns) ;
for ( i=0; i < mat->rows; i++ )
{
for ( j=0; j < mat->columns; j++ )
{
printf("\t%1.2lf", *(mat->data) );
}
printf("\n") ;
}
}
и обмен случайным образом в вышеприведенной матрице с 'j', в результате получается матрица с правильным количеством строк и столбцов, но каждое значение равно наибольшему значению j.
По сути, я надеялся, что вы сможете мне помочь, - это выяснить, как увеличить мой *(mat->data)
указатель. Я слышал кое-что о том, что когда вы вызываете оператор стрелки, он автоматически увеличивается, но, похоже, он не работает, и когда я пытаюсь *(mat->data)++
, я получаю довольно большую ошибку.
Любая помощь была бы велика, спасибо миллион.