C语言 将固定大小的数组传递给带有指针参数的函数

yzuktlbb  于 2023-10-16  发布在  其他
关注(0)|答案(3)|浏览(123)

我想知道是否有一种方法可以让下面的代码工作,或者我必须创建一个固定大小的函数的新副本?如果是这样,我怎么能有一个固定大小的通用功能。

  1. void prettyPrintMatrix_float(float **matrix, int rows, int cols){
  2. int i, j;
  3. for (i = 0; i<rows; i++){
  4. for (j = 0; j<cols; j++){
  5. printf("%10.3f", matrix[i][j]);
  6. }
  7. printf("\n");
  8. }
  9. return;
  10. }
  11. float ppArray[4][10] = {0.0f};
  12. prettyPrintMatrix_float(ppArray, 4, 10);

返回错误Access violation reading location 0xFFFFF...

mm5n2pyu

mm5n2pyu1#

如果编译器支持可变长度数组,那么你可以像这样定义函数:

  1. void prettyPrintMatrix_float( int rows, int cols, float matrix[rows][cols] ){
  2. int i, j;
  3. for (i = 0; i<rows; i++){
  4. for (j = 0; j<cols; j++){
  5. printf("%10.3f", matrix[i][j]);
  6. }
  7. printf("\n");
  8. }
  9. }

否则,您可以像这样定义函数

  1. void prettyPrintMatrix_float(const float *matrix, int rows, int cols)
  2. {
  3. for (int i = 0; i < rows; i++)
  4. {
  5. for (int j = 0; j < cols; j++)
  6. {
  7. printf("%10.3f", matrix[i * cols + j]);
  8. }
  9. putchar('\n');
  10. }
  11. }

就像

  1. prettyPrintMatrix_float( ( const float * )ppArray, 4, 10);
展开查看全部
s71maibg

s71maibg2#

如果你不能使用可变长度数组,并且你的函数将接受不同维度的矩阵,那么你的函数将不得不将其视为一维数组,并手动计算每行的开始位置。大概是这样的:

  1. void prettyPrintMatrix_float(float *matrix, int rows, int cols){
  2. int i, j;
  3. for (i = 0; i<rows; i++){
  4. for (j = 0; j<cols; j++){
  5. printf("%10.3f", matrix[i * sizeof(float) + j]);
  6. }
  7. printf("\n");
  8. }
  9. return;
  10. }
  11. float ppArray[4][10] = {0.0f};
  12. prettyPrintMatrix_float(&ppArray[0][0], 4, 10);
3mpgtkmj

3mpgtkmj3#

只是另一个解决方案与模板

  1. template<int rows, int cols>
  2. void prettyPrintMatrix_float(float (&matrix)[rows][cols])
  3. {
  4. int i, j;
  5. for(i = 0; i < rows; i++)
  6. {
  7. for(j = 0; j < cols; j++)
  8. {
  9. printf("%10.3f", matrix[i,j]);
  10. // Or
  11. //printf("%10.3f", matrix[i][j]);
  12. }
  13. printf("\n");
  14. }
  15. return;
  16. }
展开查看全部

相关问题