我想知道有没有办法让下面的代码工作,或者我是否必须为固定大小创建一个新的函数副本?如果是这样,我怎样才能拥有固定尺寸的通用功能。
void prettyPrintMatrix_float(float **matrix, int rows, int cols){
int i, j;
for (i = 0; i<rows; i++){
for (j = 0; j<cols; j++){
printf("%10.3f", matrix[i][j]);
}
printf("\n");
}
return;
}
float ppArray[4][10] = {0.0f};
prettyPrintMatrix_float(ppArray, 4, 10);
发出错误Access violation reading location 0xFFFFF...
。
答案 0 :(得分:2)
如果编译器支持可变长度数组,那么您可以定义类似
的函数void prettyPrintMatrix_float( int rows, int cols, float matrix[rows][cols] ){
int i, j;
for (i = 0; i<rows; i++){
for (j = 0; j<cols; j++){
printf("%10.3f", matrix[i][j]);
}
printf("\n");
}
}
否则你可以定义像
这样的功能void prettyPrintMatrix_float(const float *matrix, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("%10.3f", matrix[i * cols + j]);
}
putchar('\n');
}
}
并将其称为
prettyPrintMatrix_float( ( const float * )ppArray, 4, 10);
答案 1 :(得分:0)
如果您无法使用可变长度数组,并且您的函数将采用不同维度的矩阵,那么您的函数将不得不将其视为一维数组并手动进行数学计算每行的开头是。像这样:
void prettyPrintMatrix_float(float *matrix, int rows, int cols){
int i, j;
for (i = 0; i<rows; i++){
for (j = 0; j<cols; j++){
printf("%10.3f", matrix[i * sizeof(float) + j]);
}
printf("\n");
}
return;
}
float ppArray[4][10] = {0.0f};
prettyPrintMatrix_float(&ppArray[0][0], 4, 10);