整数数组 [10] = {1 , 2, 0, 3} 。我怎样才能发现这里有4个元素?我知道如何找到数组的大小

int array[10] = {1 , 2, 0, 3} . How can I find out that there are 4 elements here? I know how to find the size of array

我试过这段代码。如您所见,问题是空元素为零。所以,我试着检查一下,但问题是我可以将 0 作为一个元素。


int main()
{
    int array[10] = {1, 2, 0, 3, 4};

    printf("%d\n", sizeof(array)/ sizeof(*array)); // This is the size of array

    int i = 0;

    while(array[i] != 0  && i < 10) {
        i++;
    };

    printf("%d\n", i);

    return 0;
}```

首先将数组设置为输入范围之外的数字。像一个负数。

for(i = 0;i < 10;i++)
    array[i] = -1;

或设置为INT_MAXINT_MIN

你不能。 int array[10] 将始终创建一个包含 10 个元素的数组,您无法询问编译器已分配了哪些元素。

你可以做的是 int array[] = {1, 2, 0, 3, 4} 然后编译器会为你推断出元素的数量,你将得到 sizeof(array)/ sizeof(*array) == 5

int array[10] = {1 , 2, 0, 3} . How can I find out that there are 4 elements here?

你怎么能说那里有 4 个元素,因为你声明 int array[10] 有 10 个元素的大小。这意味着,你已经知道没有。的元素。此外,在这种情况下,您不能使用 if 语句来确定编号。你可能知道在 C 中,如果你用少于 10 个值初始化一个包含 10 个元素的数组,其余元素将自动分配给 0。

您有多种选择:

  1. 您知道初始值设定项中有多少个元素,因此您创建了另一个存储该数字的变量:
    int array[10] = {1, 2, 0, 3, 4};
    int num_items = 5;
    
    您需要在将 "add" 或 "remove" 项目更新到数组时更新 num_items。如果您将数组视为堆栈(仅在最高索引处添加或删除),那么这很简单:
    array[num_items++] = 7; // adds 7 after 4
    ...
    x = array[--num_items]; // x gets 7, 7 is "removed" from the array, need special
                            // case logic for element 0
    
  2. 您选择了一个 不是 有效的值(例如 -1)并显式初始化其余元素:
    int array[10] = {1, 2, 0, 3, 4, -1, -1, -1, -1, -1 };
    
  3. 您为初始化程序调整数组大小,这意味着它只能存储那么多元素:
    int array[] = {1, 2, 0, 3, 4};
    

否则,如果您需要一个可以随着项目的添加或删除而增长或缩小的容器,则需要使用不同的数据结构(例如链表)。