如何将连续数组作为参数传递给C?

时间:2017-06-02 08:40:33

标签: 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;
    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]);
        }
    }
}

错误讯息: 'print_arr'的冲突类型[默认启用]

2 个答案:

答案 0 :(得分:3)

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

因此,在print_arr()函数上方声明main()函数。像:

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

答案 1 :(得分:1)

你没有在main之前声明print_arr函数,因此无法找到它。休息工作顺利。