【问题标题】:suggestion for end of integer array marker整数数组标记结束的建议
【发布时间】:2012-06-26 09:35:01
【问题描述】:

我在C 中有一个固定大小的数组。在那里我可能有任何数量(小于数组大小)的有用元素。现在我只需要我有用的元素。所以我正在考虑为整数数组使用end of array 标记。首先


a) 这可能吗?

b) 如果可能,怎么做?

【问题讨论】:

  • 不可能。想象一下当所有数组都有有用的元素时会发生什么……标记没有空间。使用辅助变量来确定有多少元素是有用的。
  • @pmg 好吧,如果您想到字符串,它们就是数组,并且它们确实有一个字符串结束标记(null \0)。您需要做的就是创建一个大小比所需元素大一格的数组。
  • @nadirs:你是对的。如果 OP 可以为标记使用特定值(例如:042-8888INT_MAXINT_MIN),这是可能的。
  • @pmg 实际上,如果 OP 可以指定数组中整数的可能值(或范围),这将有所帮助。

标签: c arrays data-structures int


【解决方案1】:

我会采取稍微不同的方法

struct IntArray
{
  int data[N];
  int size; // <-- use this to keep track of the size.
}

【讨论】:

    【解决方案2】:

    从逻辑上讲,如果您能找到可以充当 END_OF_ARRAY 的唯一整数,并且不会出现在您的有用数字集中......

    您只需要在末尾显式添加它...并稍后检查将指示结束的数字

    【讨论】:

      【解决方案3】:

      这取决于它是一个数组以及哪些值是有效的。

      您说您有一个 int 数组,请使用对列表无效的任何值。如果所有条目都是正数,则使用负数作为结尾。如果值都在 INT_MAX 以下,则使用它作为结束标记。

      【讨论】:

        【解决方案4】:

        您始终可以将数组视为缓冲区并跟踪当前有用元素的数量。

        struct buffer 
        { 
             int* array;
             size_t size;
        }
        

        【讨论】:

        • 这是我推荐的方法。
        【解决方案5】:

        是的,创建一个名为 end_of_array_marker 的整数变量。

        需要比这更复杂吗?

        【讨论】:

        • 我经常不明白关于 SO 的问题。我不顾一切地耕耘。
        【解决方案6】:

        有两种方法可以做到这一点(如果 int 值可以具有任何可能的 int 值)。


        第一个选项:存储数组中的元素计数,如果添加/删除项目,则增加值。

        int count;
        int *array;
        

        第二个选项:用指向数组中下一个变量的指针创建一个结构。如果它是NULL,则您已到达列表的末尾。

        struct Item {
            int i;
            struct Item *next;
        }
        // pointing at the start adress:
        struct Item *start = NULL;
        // adding first item:
        start = malloc(sizeof(struct Item));
        start->i = 123;
        start->next = NULL // mark the current end of list (not needed if you add a value right after the first)
        // adding second item:
        start->next = malloc(sizeof(struct Item));
        start->next->i = 456;
        start->next->next = NULL
        // etc
        

        【讨论】:

          猜你喜欢
          • 2019-11-28
          • 2016-12-11
          • 2023-03-30
          • 1970-01-01
          • 2012-04-01
          • 2016-10-15
          • 1970-01-01
          • 2015-07-05
          • 1970-01-01
          相关资源
          最近更新 更多