C阵列循环通过

Me *_*agi 4 c arrays

而不是循环遍历数组的每个元素,是否可以只遍历具有赋值的元素?

在下面的例子中,我想只遍历三个元素而不是循环遍历数组中的每个元素.我有什么选择?我讨厌在基于某些逻辑分配给他们的少数元素时循环遍历数千个元素.

main()
{
    int i, intArray[10000];
    intArray[334] = 30;
    intArray[563] = 50;
    intArray[989] = 90;

    for (i = 0; i < 10000; i++)
    {
      printf("%d\n", intArray[i]);
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢您阅读该帖子.对不起,如果重新发布.我在论坛中找不到类似的问题.

Jon*_*ler 6

只是间接地:

#include <stdio.h>

int main(void)
{
    int i, intArray[10000];
    int active[10000];
    int n_active = 0;
    intArray[334] = 30;
    active[n_active++] = 334;
    intArray[563] = 50;
    active[n_active++] = 563;
    intArray[989] = 90;
    active[n_active++] = 989;

    for (i = 0; i < n_active; i++)
      printf("%d\n", intArray[active[i]]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者,更简洁但不是更清楚:

#include <stdio.h>

int main(void)
{
    int i, intArray[10000];
    int active[10000];
    int n_active = 0;
    intArray[active[n_active++]=334] = 30;
    intArray[active[n_active++]=563] = 50;
    intArray[active[n_active++]=989] = 90;

    for (i = 0; i < n_active; i++)
      printf("%d\n", intArray[active[i]]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果对同一索引有多个赋值(该索引将存储在active数组中两次),则这两个程序都会受到影响.就目前而言,它也不会检查active数组的溢出(但这不应该是一个问题;假设是只填充了少数行),并且索引按照它们的顺序存储重新呈现 - 不是按关键顺序.所有这些缺陷都可以修复,但需要更多的代码(它可能需要是一个或两个函数).