Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/networking/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:将矩阵传递给函数的所有可能方法,以及关于argc和argv的一些信息_C_Pointers_Matrix_Argv_Argc - Fatal编程技术网

C:将矩阵传递给函数的所有可能方法,以及关于argc和argv的一些信息

C:将矩阵传递给函数的所有可能方法,以及关于argc和argv的一些信息,c,pointers,matrix,argv,argc,C,Pointers,Matrix,Argv,Argc,自从几天以来,我遇到了一些多重编译错误,在底部,我最大的错误是一个,您可以在下面的代码中看到 #include <stdio.h> #include <stdlib.h> #include <time.h> void generateMatrix(int rows, int cols, int matr[][]); void show(int rows, int cols, int matr[][]); // void analize(int matr[ro

自从几天以来,我遇到了一些多重编译错误,在底部,我最大的错误是一个,您可以在下面的代码中看到

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

void generateMatrix(int rows, int cols, int matr[][]);
void show(int rows, int cols, int matr[][]);
// void analize(int matr[rows][cols], int rows, int cols);

int main(int argc, char* argv[])
{
    srand(time(NULL));
    if(argc < 3)
    {
        printf("Not enough inputed arguments, you have to insert only two number, one for rows the last for cols\n");
        return 1;
    }
    else
    {
        int rows = atoi(argv[1]), cols = atoi(argv[2]);
        int mat[rows][cols];
        generateMatrix(rows, cols, mat);
        show(rows, cols, mat);
        // analize(mat, rows, cols);
        
        return 0;
    }
}

void generateMatrix(int rows, int cols, int matr[][])
{
    for(int i=0; i<rows; i++)
        for(int j=0; j<cols; j++)
            matr[i][j] = rand() % 20;
}

void show(int rows, int cols, int matr[][])
{
    for(int i=0; i<rows; i++)
    {
        for(int j=0; j<cols; j++)
            printf("%5d", matr[i][j]);
        printf("\n");
    }
}

好的,现在回答问题:

  • 修复错误需要什么
  • 是否有可能改进代码中的某些内容,而不做太多更改??(可选)
  • 在这种情况下,矩阵将用作指针?(保存数据并正确传递到函数的工作?)

  • 感谢花费的时间和将来的答案。

    编译器无法将
    int matr[][]
    作为函数参数处理

    解决此问题的最简单方法是将其作为
    int*matr
    传递。您可以按如下方式取消引用:
    matr[i*cols+j]
    。由于行的主要顺序,这将以正确的顺序访问它。要消除编译器警告,您需要通过键入
    &matr[0][0]
    来传递它。大多数程序员不会依赖于多维数组的已定义顺序,而是继续将其声明为单个维度


    const
    是指通过引用某个东西而不能将其写入的方式。所以,是的,您可以声明变量const。它不会破坏任何东西。请注意,当您定义一个
    常量时,必须将其赋值给它,这正是您想要做的。

    您遗漏了分配或传递可变维度矩阵的最简单方法-使用:

    请注意,返回类型是
    void*
    ,因此没有类型安全性

    这将以更安全的方式分配数组

    void allocateArray( size_t x, size_t y, int ( **array )[x][y] )
    {
        *array = malloc( sizeof( **array ) );
    
        return( array );
    }
    
    您可以使用此表单处理矩阵:

    void printMatrix( size_t x, size_t y, int array[x][y] )
    {
        for ( size_t ii = 0; ii < x; ii++ )
        {
            char *separator = "";
            for ( size_t jj = 0; jj < y; jj++ )
            {
                printf( "%s%d", sep, array[ ii ][ jj ] );
                separator = ", ";
            }
            printf( "\n" );
        }
    }
    
    void打印矩阵(大小x,大小y,整数数组[x][y])
    {
    对于(尺寸ii=0;ii

    VLA确实需要符合C99的编译器。在C11中,VLA是可选的,但不支持VLA的一致性C11编译器必须定义
    \uuuuu STDC\u NO\u VLA\uuuuu

    请阅读。请不要发布指向文本图像的链接。您的帖子需要包含构建错误/日志的文本内容。请一次发布一个问题。您需要做的第一件事是修复生成错误。最好将错误文本复制/粘贴到问题中。不要张贴文字图片。相反,在你的问题中加入由
    `
    包围的文本,将其格式化为固定文本。我做了,现在好了吗?
    void allocateArray( size_t x, size_t y, int ( **array )[x][y] )
    {
        *array = malloc( sizeof( **array ) );
    
        return( array );
    }
    
    void printMatrix( size_t x, size_t y, int array[x][y] )
    {
        for ( size_t ii = 0; ii < x; ii++ )
        {
            char *separator = "";
            for ( size_t jj = 0; jj < y; jj++ )
            {
                printf( "%s%d", sep, array[ ii ][ jj ] );
                separator = ", ";
            }
            printf( "\n" );
        }
    }