有没有办法创建一个空C数组,并在更新时跟踪其空白?

时间:2017-02-24 11:08:50

标签: c arrays

我确实认为在C中没有空array这样的东西,我在想是否可以让它们像其他语言一样指向null,也许如果它的某些元素具有价值信息,然后他们不再那么让他们再没有任何意义......但我真的想不出任何方式这样做。

2 个答案:

答案 0 :(得分:1)

如果数组未初始化,那么您的程序无法确定是否仅基于数组。你需要记住"那些信息本身,例如:

#include <stdbool.h>

int main (void)
{
    int a[3] ;
    bool a_empty = true;

    // ...
    if ( a_empty )
        printf("a is empty");
    // ...

    a[0] = 1; 
    a_empty = false;
}

另一种方法是将一组特定内容定义为表示&#34;空&#34; (这称为哨兵值):

#include <stdbool.h>

enum { EMPTY = -1 };

bool is_empty(int a[3])
{
    return a[0] == EMPTY && a[1] == a[0] && a[2] == a[0];
}

int main (void)
{
    int a[3] = { EMPTY, EMPTY, EMPTY };

    // ...
   if ( is_empty(a) )
        printf("a is empty");
}

当然,您必须选择不是预期数组内容的有效数据的标记。如果不存在这样的标记,那么你别无选择,只能使用我的第一个例子中的额外变量。

答案 1 :(得分:-2)

您可能能够创建一个空数组,然后比较您的数组,如果它相同则数组为空,否则它必须包含一些内容。

void isEmpty(int *a)
{
 int compare[3]
    if ( a == compare[2])
        printf("is empty!\n") ;
    else
        printf("not empty!\n");
}

int main (void)
{
    int a[3] ;
    isEmpty(a) ;
    a[0] = 1 ;
    isEmpty(a) ;
    return 0 ;
}

我没有机会对此进行测试,但之前在PHP中做过类似的事情。

相关问题