我必须使用静态二维数组和动态矩阵作为我的大学学习的一部分。因此,我创建了它们,现在尝试填充它们,然后将它们打印到控制台,但是出现“段错误”。这就是我试图实现的方式:
#include "arrayutils.h"
#include <stdlib.h>
#include <stdio.h>
#define ROWS 5
#define COLUMNS 7
int main3() {
/*init static array*/
double twodimarray[ROWS][COLUMNS];
/*init dynamic array*/
double **matrix = (double**) malloc(sizeof(double*) * ROWS);
for(int i = 0; i < ROWS; i++) *(matrix + i) = (double*)malloc(sizeof(double) * COLUMNS);
for(int i = 0; i < ROWS; i++){
dfillarran(*(matrix + i), COLUMNS);
dfillarran(twodimarray[i], COLUMNS);
}
puts("Dynamic matrix :");
printmx(matrix, ROWS,COLUMNS);
puts("Static array:");
printmx(twodimarray, ROWS, COLUMNS);
/*freeing mem*/
for(int i = 0; i < ROWS; i++) free(*(matrix + i));
free(matrix);
}
错误肯定在函数printmx()
中,但我不明白为什么;它适用于动态矩阵,仅适用于静态矩阵,但不能使用静态数组名称,它是指向指针数组的指针,其中每个指针都指向值数组,就像动态数组一样!printmx()
中有我的arrayutils.h
函数的代码:
/**Print Matrix*/
void printmx(double** mx, int rows, int col){
for(int i = 0; i < rows; i++) {
for(int j = 0; j < col; j++){
printf("%.lf ", *(*(mx + i)+j));
}
putchar('\n');
}
putchar('\n');
}
用随机值填充数组的函数可以在here中找到,arrayutils.c
是我为所有其他使用相同功能的任务(如填充和打印数组)创建的,但我认为,问题不在于那里..可能是,我在理论上某个地方错了,但仍然没有得到静态矩阵和动态矩阵之间的区别,请纠正我:)
对于不同类型的两个对象,可能无法调用功能printmx
。>>
数组twodimarray
是一个二维数组,当传递给函数时,其类型为double ( * )[COLUMNS]
。
虽然矩阵是类型为double **
的指针。