我是C的初学者,以下是Quine-McCluskey方法的代码,其中2D数组的行与同一数组的其他行匹配。
#include <stdio.h>
int tally(int *arr[int k],int *arr1[int k],int a, int b, int c, int d)
{
int index,i,j,k;
for (i=a;i<b;i++)
{
for (j=b;j<c;j++)
{
for (k=0;k<d;k++)
{
if (arr[i][k]==arr[j][k])
{
arr1[index][k]=arr[i][k];
}
else
{
arr1[index][k]=2;
}
}
index++;
}
}
return 0;
}
int main()
{
int arr[8][4],arr1[28][4];
int no1,one1,two1,three1,four1,index=0,i,j;
tally((int **)arr, (int **)arr1,0,no1,one1,4);
tally((int **)arr, (int **)arr1,no1,one1,two1,4);
for(i=0;i<28;i++)
{
for (j=0;j<4;j++)
{
printf("arr[i][j]\t");
}
printf("\n");
}
}
我有两个错误说:
try2.c:5:20: error: expected expression before ‘int’
int tally(int *arr[int k],int *arr1[int k],int a, int b, int c, int d)
^
try2.c:5:27: error: expected ‘;’, ‘,’ or ‘)’ before ‘int’
int tally(int *arr[int k],int *arr1[int k],int a, int b, int c, int d)
我该如何解决这个问题?
答案 0 :(得分:1)
指向指针的指针与数组数组不同。你不应该把参数投射到你的函数中。
如果您的编译器支持可变长度数组(符合C99标准),您可以这样做:
#include <stdio.h>
int tally(size_t rows_s, size_t rows_l, size_t cols,
int small[rows_s][cols], int large[rows_l][cols])
{
// ...
return 0;
}
int main()
{
size_t cols = 4;
size_t rows_s = 8, rows_l = 28;
int small[rows_s][cols], large[rows_l][cols];
tally(rows_s,rows_l,cols,small,large);
return 0;
}
我已经删除了其他论点,因为它不清楚它们的用途。一般来说,我建议为你的论点使用不言自明的名称,否则会让人感到有些困惑。
答案 1 :(得分:0)
更改
int tally(int *arr[int k],int *arr1[int k],int a, int b, int c, int d)
到
int tally(int k, int *arr, int *arr1, int a, int b, int c, int d)
别忘了调整你的函数调用!
编辑:
我知道,您的代码不会检查k
,所以只需将其更改为:
int tally(int *arr[], int *arr1[], int a, int b, int c, int d)