如何在C中作为参数传递连续数组?

如何在C中作为参数传递连续数组?,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,我创建了一个具有随机值(0-9)的连续数组,但我不知道如何将它传递给一个将打印它的函数 现在,只要需要打印,我就在主函数中遍历数组。但我想有一个函数,它会使我的代码更干净 下面是一个简单的代码示例: #include <stdio.h> #include <stdlib.h> int **alloc_2d_int(int rows, int cols); int main(int argc, char** argv){ int **matrix; in

我创建了一个具有随机值(0-9)的连续数组,但我不知道如何将它传递给一个将打印它的函数

现在,只要需要打印,我就在主函数中遍历数组。但我想有一个函数,它会使我的代码更干净

下面是一个简单的代码示例:

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

int **alloc_2d_int(int rows, int cols);

int main(int argc, char** argv){
    int **matrix;
    int i,j,size=3;
    matrix = alloc_2d_int(size,size);

    // generate the array
    for (i=0; i<size; i++)
    {
        for (j=0; j<size; j++)
        {
            matrix[i][j] = rand() % 10;
        }
    }

    // how I print the array right now
    for (i=0; i<size; i++)
    {
        for (j=0; j<size; j++)
        {
            printf("[%d][%d]=%d\n", i,j,matrix[i][j]);
        }
    }

    // this is how I want the printing to happen
    print_arr(matrix,3);
}

int **alloc_2d_int(int rows, int cols) {
    int *data = (int *)malloc(rows*cols*sizeof(int));
    int **array= (int **)malloc(rows*sizeof(int*));
    int i;
    for (i=0; i<rows; i++)
        array[i] = &(data[cols*i]);
    return array;
}

void print_arr(int **array,int size)
{
    int i,j;
    for (i=0; i<size; i++)
    {
        for (j=0; j<size; j++)
        {
            printf("matrix[%d][%d]=%d\n", i,j,array[i][j]);
        }
    }
}
#包括
#包括
int**alloc_2d_int(int行,int列);
int main(int argc,字符**argv){
int**矩阵;
int i,j,大小=3;
矩阵=alloc_2d_int(大小、大小);
//生成数组

对于(i=0;i您没有在main之前声明
print\u arr
函数,因此无法找到它。Rest工作正常。

您没有在main之前声明
print\u arr
函数,因此无法找到它。Rest工作正常。

您忘记添加声明(原型)函数的返回类型。在C语言中,默认情况下,函数的返回类型为
int
类型。但是对于
print\u arr()
函数,返回类型为
void
。因此,会出现冲突类型错误

因此,在
main()
函数上方声明
print\u arr()
函数。例如:

void print_arr(int **array,int size);

您忘记添加函数的声明(原型)。在C语言中,默认情况下,函数的返回类型为
int
类型。但是对于
print\u arr()
函数,返回类型为
void
。因此,您会得到冲突类型错误

因此,在
main()
函数上方声明
print\u arr()
函数。例如:

void print_arr(int **array,int size);

如果您为
print\u arr
函数添加原型,您的代码将正常工作:或者…将
print\u arr
函数移到
main
上方。基本上,编译器从上到下解析源文件,您需要提供前向声明,或者在实际使用之前移动函数定义。如果您添加原型或者您的
print\u arr
函数,您的代码将工作:或者…将
print\u arr
函数移到
main
上方。基本上,编译器从上到下解析源文件,您需要提供前向声明,或者在实际使用之前移动函数定义。gcc或g++编译器gcc或g++编译器