【问题标题】:Cycle through certain range in array in C循环遍历C中数组中的某个范围
【发布时间】:2012-12-03 10:19:24
【问题描述】:

我有这个代码

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]...

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

感谢您的帮助!

【问题讨论】:

  • 添加一个新函数cycle_range,它将最小/最大限制作为参数?

标签: c arrays cycle


【解决方案1】:

试试这样的:

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

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

    return first[counter % length];
}

这与您的解决方案一样工作,但它在array 中进一步开始min 元素并循环max-min+1 元素而不是40

(在您的情况下sometypeunsigned char*,但如果您愿意,可以在此处替换其他类型)

【讨论】:

  • 为什么要声明、赋值和使用first?为什么不这样做:return array[min + (counter % (max - min + 1));
  • 这完全一样,只是分解后更好看
  • 同意;在维护代码时,我更愿意看到分解版本而不是array[min + (counter % (max - min + 1))]
【解决方案2】:
unsigned char *cycle(int counter,int min, int max, unsigned char *packets[40]){
    int tmp = (counter % (max - min + 1)) + min;
    return packets[tmp];
}

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2012-02-21
    • 2013-04-06
    • 2016-12-21
    相关资源
    最近更新 更多