在C中以数组的某个范围循环

时间:2012-12-03 10:19:25

标签: c arrays cycle

我有这段代码

int x = 0
int MAX = 21;
int MIN = 18;
char *arr[40];
do{
  char* current = cycle(x,arr)
  x++;
}while(x<10000000)

我的cycle()当前循环遍历整个数组

unsigned char *cycle(int counter, unsigned char *packets[40]){
int tmp = counter % 40;
return packets[tmp];
 }

但是我想让它在[MIN,MAX]范围内以数组形式循环。 所以while循环中的返回值是:arr [18],arr [19],arr [20],arr [21],arr [18],arr [19] ......

知道如何实现这个吗?我不想要使用全局变量的解决方案。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

sometype cycle_range(int counter, sometype array[], unsigned min, unsigned max) {

    sometype* first = array+min;
    unsigned length = max-min+1;

    return first[counter % length];
}

这与您的解决方案类似,但它会在min中进一步启动array个元素,并循环遍历max-min+1个元素,而不是40

sometype在您的情况下为unsigned char*,但如果您愿意,可以在此替换其他类型

答案 1 :(得分:0)

unsigned char *cycle(int counter,int min, int max, unsigned char *packets[40]){
    int tmp = (counter % (max - min + 1)) + min;
    return packets[tmp];
}