如何在函数声明语句中使用二维数组?

时间:2016-02-11 19:01:53

标签: c arrays function multidimensional-array

void sort(int [],int);

这就是我通常在函数声明语句中使用单维数组(即int [])来处理类似排序的程序,它可以正常工作而没有任何问题

但是对于我的矩阵添加程序,当我在具有类似格式int [][]的函数声明语句中使用二维数组(即:void mat(int [][],int [][],int ,int); )时,我得到一些错误消息,如: -

1.多维数组必须具有除第一个之外的所有维度的边界。

2.来自' int(*)[10]'的转换无效到' int' [-fpermissive]。

所以我的问题是如何在函数声明语句中编写二维数组。

下面我使用函数附加了我的完整Matrix添加程序: -

#include<stdio.h> 
void mat(int [][],int [][],int ,int);
int main()
{
    int a[10][10],b[10][10],m,n,i,j;
    printf("Enter the rows and coloumns: ");
    scanf("%d %d",&m,&n);
    printf("\nEnter the elements of 1st Matrix:");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
        scanf("%d",&a[i][j]);
    printf("\nEnter the elements of the 2nd Matrix:");
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&b[i][j]);
    mat(a,b,m,n);
}
void mat(int a[10][10],int b[10][10],int m,int n)
{
    int i,j,c[10][10];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
        c[i][j]=a[i][j]+b[i][j];
        printf("\nThe addition of the 2 Matrix is :");
        for(i=0;i<m;i++)
        {
            printf("\n");
            for(j=0;j<n;j++)
            printf("%d",c[i][j]);
        }
}

3 个答案:

答案 0 :(得分:1)

原型

./john [password file's name] --format=[format's name] --wordlist=[dictionary file's name] --rules=all

应该是

void mat(int [][],int [][],int ,int);  

您必须指定更高的尺寸。换句话说,上面的原型相当于

void mat(int [][10],int [][10],int ,int);  

void mat(int (*)[10],int (*)[10],int ,int); 是一种类型(指向10 int (*)[10]数组的指针),没有大小int,它的类型不完整。

答案 1 :(得分:0)

在C中,当您声明一个数组时,必须指定除可能的最后一个数组的所有维度。换句话说,你可以写一个这样的函数:

void iTakeAnArray(int[]);

或者这个:

void iTakeAnotherArray(int[][5]);

但你不能写

void oopsNotAllowed(int[][]);

其原因与C编译器通常如何表示数组有关。为了查找2D数组,编译器需要知道在数组的一个维度上有多少个元素,以便它知道在执行数组访问时要找到的最终内存偏移量。

除了

之外,没有一种干净的方法可以解决这个问题
  1. 让函数采用2D数组,您可以预先修改大小,或
  2. 使用1D数组模拟2D数组。
  3. 对于第二个选项,您可以使用大小为m x n的单个1D数组表示维数m x n的数组。要查找元素arr[i][j]。你看看数组中的位置i * n + j。这有点hacky,但它确实有效!

答案 2 :(得分:0)

亲爱的,你不能以这样的方式初始化二维数组a [] [] C.如何知道那里有多少列。

  • 相反,你可以做[] [10]。
  • 但我个人的偏好是使用像(* a)[10]这样的指针。因为它使事情易于想象。