“错误:'int'之前的预期表达式”和“错误:期望';',','或')''int'之前”

时间:2014-08-10 18:13:53

标签: c arrays pointers multidimensional-array

我是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)

我该如何解决这个问题?

2 个答案:

答案 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)