如何获得超大数组的最后一个元素?

时间:2019-05-13 16:53:40

标签: c arrays

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int capacity = 5;
  int used = 0;
  int *arr = (int *)malloc(sizeof(int) * capacity);

  printf("Insert numbers one by one, send -999 to break input flow: \n");
  for (;;)
  {
    int num;
    scanf("%d", &num);

    if (num == -999)
    {
      break;
    }

    if (used == capacity)
    {
      capacity *= 2;
      arr = (int *)realloc(arr, sizeof(int) * capacity);
    }

    arr[used] = num;
    used++;
  }

  return 0;
}

想象一下,“已使用”变量是未知的,“容量”也是未知的。 您得到一个未知长度的数组。 您将如何获得数组的最后一个“有用”元素?

2 个答案:

答案 0 :(得分:2)

标准C中没有任何内容可跟踪默认初始化设置的元素的值与程序显式设置的值之间的任何区别,标准C中的任何内容都不跟踪程序已显式设置的元素。程序检测为其分配了值的数组的最后一个元素的唯一方法是维护为此所需的任何信息。

一种实现方法是记住已分配了值的最后一个元素的索引。

另一种方法是将数组的所有元素初始化为一个不用于任何其他目的的值。然后可以检查数组的内容,以查看没有该标记值的最后一个元素是什么。

还有其他方法,但是所有方法都涉及程序维护自己的信息。 C不提供任何此类服务。

答案 1 :(得分:1)

听起来您想要Javascript样式的封装数组功能。您将必须使用C语言进行编写。请查看此链接,详细描述... https://www.happybearsoftware.com/implementing-a-dynamic-array