【问题标题】:Passing 2 matrice of unknown sizes as parameters传递 2 个未知大小的矩阵作为参数
【发布时间】:2013-11-27 22:54:37
【问题描述】:

首先 - 我的代码有效:

void main(){
int mat1[5][5]={{1,2,3,4,5},
                {6,2,5,5,6},
                {1,5,6,6,7},
                {4,5,6,7,8},
                {5,6,7,8,9}};
int mat2[3][3]={{1,2,3},
                {2,3,4},
                {3,4,5}};
    int mat1size=5,mat2size=3,maxsize=MAX(mat1size,mat2size),*ptr,arraysize=0;
    ptr=func(mat1,mat2,maxsize,&arraysize);
    .
    .
    .
    }


int* func(int mat1[][5],int mat2[][3],int maxsize,int* arraysize){
int i,j,*ptr=(int*)malloc(sizeof(int)*3);
    if(fptr==NULL){
    printf("Out of memory!");
    return;
    }
for(i=0;i<maxsize;i++)
    for(j=0;j<maxsize;j++)
        if(mat1[i][j]==mat2[i][j]){
            if(*arraysize%3==0 && *arraysize!=0)
                ptr=(int*)realloc(ptr,sizeof(int)*(*arraysize+3));
            ptr[*arraysize]=i;
            ptr[*arraysize+1]=j;
            ptr[*arraysize+2]=mat1[i][j];
            *arraysize+=3;
        }
return ptr;
}

问题是我在函数的签名中声明了矩阵列。我正在寻找更通用的解决方案。 如果你想知道这个函数应该做什么: 它检查两个矩阵上的每个公共索引。如果值相等 - 将行、列和值添加到新数组并返回。

【问题讨论】:

    标签: c function matrix signature declare


    【解决方案1】:

    使用可变长度数组作为函数参数(这是 100% 标准 C99):

    #include <stdio.h>
    
    void print_matrix(size_t w, size_t h, int m[w][h])
    {
        for (size_t i = 0; i < w; i++) {
            for (size_t j = 0; j < h; j++) {
                printf("%3d ", m[i][j]);
            }
            printf("\n");
        }
    }
    
    int main()
    {
        int arr[2][3] = {
            { 1, 2, 3 },
            { 4, 5, 6 }
        };
    
        print_matrix(2, 3, arr);
        return 0;
    }
    

    【讨论】:

    • 哇,真快!谢谢,只能在 6 分钟内接受答案,所以我稍等一下:> size_t 是什么意思?编辑:试过了,没用。 “错误:不允许使用参数”
    • @MuliYulzary 我再说一遍,这是 C99。您需要使用支持 C99 的编译器对其进行编译。不是 C++ 编译器,而是 C 编译器。不错,像微软的 MSVC 这样过时的编译器,但是像 gcc 或 clang 这样的体面的 C 编译器。 “size_t 是什么意思?” - 你应该可以用谷歌搜索那个。
    • 顺便说一句,我必须使用 Visual C++,因为那是我的大学使用的,我需要它来编译和运行它。 +感谢回答,-感谢方法。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2013-09-10
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多