C中二维数组内的一维数组比较

时间:2018-02-28 06:04:04

标签: c arrays compare

我想在特定函数中比较两个不同大小的数组。我写了一个这样的函数:

static bool compare_arrays(uint8_t array_1[] , uint8_t array_2[][])
{
    static int index=0;
    static bool isequal = false;

    for(int i = 0 ; i<count_current; i++ )
    {
        for(int j = 0; j<6 ; j++ )
        {
            if (array_1[j] == array_2[i][j])            
            {
                index++ ;
            }
            else
            {
                index=0;
                return false;
            }
        }
        if (index == 6)
        {
            index=0;
            isequal = true;
            i = count_current + 2;
        }
        else
        {
            index=0;
            isequal = false; 
        }   
    }
    return isequal;
}

定义一些变量;

static bool matching_array;
static uint8_t one_dimensional_array[6];
static uint8_t two_dimensional_array[10][6];    

然后我使用这样的功能;

matching_array= compare_arrays( one_dimensional_array, two_dimensional_array);

但是我得到了这样的错误;

..\..\..\main.c(857): error:  #98: an array may not have elements of this type

你有什么建议吗?

1 个答案:

答案 0 :(得分:2)

static bool compare_arrays(uint8_t array_1[] , uint8_t array_2[][])

必须存在第二个维度 - 否则当有人写作array_2[y][x]时,编译器无法确定要走多远的位置。

static bool compare_arrays(uint8_t array_1[] , uint8_t array_2[][6])

实际上,2d数组衰减成指向它的第一个元素 - 它的类型为uint8_t (*)[6]。单个暗淡阵列同样会在此处衰减为uint8_t*。请记住,编译器不会考虑传递数组的第一个维度。除了第一个定义的大小外,所有声明都必须包含所有声明。