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]);
}
}
答案 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数组,编译器需要知道在数组的一个维度上有多少个元素,以便它知道在执行数组访问时要找到的最终内存偏移量。
除了
之外,没有一种干净的方法可以解决这个问题对于第二个选项,您可以使用大小为m x n的单个1D数组表示维数m x n的数组。要查找元素arr[i][j]
。你看看数组中的位置i * n + j
。这有点hacky,但它确实有效!
答案 2 :(得分:0)
亲爱的,你不能以这样的方式初始化二维数组a [] [] C.如何知道那里有多少列。