另一个不同的例子是“你可以用 分配=,但不能==与struct类型比较。
struct S {
    int array[5];
};
struct S a = { { 1, 2, 3, 4, 5 } };
struct S b;
b = a; /* assignment ok */
if (b == a) { /* equality not ok */ }
  那么我应该如何在条件下使用数组呢?
您可以使用memcmp.
if (memcmp(b.array, a.array, sizeof(b.array)) == 0) { /* ... */ }
编辑:请注意,memcmp执行两个内存位置的逐字节比较。正如 Eric 指出的那样,如果您的对象具有不同值的填充位,或者您的类型具有相同值的多个位表示,则memcmp可能会产生误报。
在实践中,通过以标准化方式初始化对象(例如,在进行成员分配之前使用内存)memset来避免这个问题。0 编辑: 即便如此,比较通过memcmp仍可能产生假阴性。执行比较的最大可移植方式是将每个对应的成员相互比较。(点击链接了解血腥细节。)
您可以创建一个辅助函数来简化此操作:
/* API as memcmp, but memory treated like array of int, remainder bytes ignored */
int memcmp_int (const void *a, const void *b, size_t sz) {
    const int *aa = a;
    const int *bb = b;
    while (sz >= sizeof(int)) {
        if (*aa < *bb) return -1;
        if (*aa > *bb) return 1;
        ++aa;
        ++bb;
        sz -= sizeof(int);
    }
    return 0;
}
然后,可以非常简单地修改代码:
if (memcmp_int(b.array, a.array, sizeof(b.array)) == 0) { /* ... */ }