【问题标题】:How to pass a matrix of unknown size as parameter in a function in C? [duplicate]如何在C中的函数中将未知大小的矩阵作为参数传递? [复制]
【发布时间】:2021-02-11 11:27:59
【问题描述】:

我想定义一个可以灵活处理矩阵的函数。也就是说,我需要一个可以处理任意大小矩阵的函数。

我的第一次尝试是将矩阵作为指针处理,这样:

#include <stdio.h>
#include <stdlib.h>

#define MAX_L 10
#define MAX_C 10

void initializeMatrix(int *matrix, int lines, int columns){
    int i,j,color;
    for(i=0;i<lines;i++){
        for(j=0;j<columns;j++){
            *(matrix+i*columns+j) = rand()%10;
        }
    }
}

void printMatrix(int *matrix, int lines, int columns){
    int i,j,color;
    for(i=0;i<lines;i++){
        for(j=0;j<columns;j++){
            printf("%d\t",*(matrix+i*columns+j));
        }
        printf("\n");
    }
}

int main(){
    int x,y,i,color,count,finish;
    int matrix[MAX_L][MAX_C];

    initializeMatrix(matrix,MAX_L,MAX_C);
    printMatrix(matrix,MAX_L,MAX_C);
    return 0;
}

以这种方式处理矩阵有什么问题吗?这是一个很好的做法吗?

【问题讨论】:

标签: arrays c function matrix parameters


【解决方案1】:

以这种方式处理矩阵有什么问题吗?这是一个好习惯吗?

没有。

void ...Matrix(int *matrix, int lines, int columns) 需要 int *matrix...Matrix(matrix,MAX_L,MAX_C); 不会将 matrix 转换为 int *

节省时间,启用所有警告,因为您的编译器应该已经告诉您这一点。

C 中的索引范围是[0...SIZE_MAX]。考虑size_t 而不是int。注意size_tunsigned 类型。

对于 C99 和此后的许多编译器,代码可以使用 VLA 声明,正如 @dbush 所建议的那样。

// void printMatrix(int *matrix, int lines, int columns){
void printMatrix(size_t lines, size_t columns, const int matrix[lines][columns]) {

当引用对象不变时使用const

【讨论】:

    【解决方案2】:

    如果先列出大小参数,则可以将每个维度的大小设为变量,然后在数组维度中使用它们。

    void initializeMatrix(int lines, int columns, int matrix[lines][columns]){
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2022-09-21
      • 2015-09-28
      相关资源
      最近更新 更多