c中数组索引的多个参数

Multiple arguments to the index of the array in c

我完成了以下代码:

#include <stdio.h>
#define N   10000000
int main() {
    static int rot[N], dd[N], qu[N];
    int a, t, i, j, p, head, cnt;
    scanf("%d%d", &a, &t);
    for (i = 0, p = 1; i < N; i++) {
        while (p * 10 <= i)
            p *= 10;
        rot[i] = i % 10 == 0 ? -1 : (i % 10) * p + i / 10;
    }
    for (i = 0; i < N; i++) 
        dd[i] = N;
    head = cnt = 0;
    dd[1] = 0, qu[head + cnt++] = 1;
    while (cnt) {
        int d;
        i = qu[cnt--, head++], d = dd[i] + 1;
        if (i == t) {
            printf("%d\n", dd[i]);
            return 0;
        }
        if ((long long) i * a < N) {
            j = i * a;
            if (dd[j] > d)
                dd[j] = d, qu[head + cnt++] = j;
        }
        if (rot[i] != -1) {
            j = rot[i];
            if (dd[j] > d)
                dd[j] = d, qu[head + cnt++] = j;
        }
    }
    printf("-1\n");
    return 0;
}

可以看出,qu是一个static int数组,我想知道"i = qu[cnt--, head++],"行是做什么的,我们如何将两个参数传递给数组的索引。

在下标运算符中使用了带逗号运算符的表达式。

qu[cnt--, head++],

表达式的结果是第二个操作数的值。

来自 C 标准(6.5.17 逗号运算符)

2 The left operand of a comma operator is evaluated as a void expression; there is a sequence point between its evaluation and that of the right operand. Then the right operand is evaluated; the result has its type and value.

在我看来,这是一种糟糕的编程风格,只会让代码的读者感到困惑,因为不清楚是否存在拼写错误,应该使用运算符 + 来代替逗号,例如
qu[cnt-- + head++] 类似于 qu[head + cnt++]。可能确实有错别字