这句话背后的逻辑是什么:for(--index; index> = 0; --index)?

时间:2017-10-21 21:32:26

标签: c

我在C语言书中找到了这个例子。 此代码转换输入数字基数并将其存储在数组中。

#include <stdio.h>

int main(void)
{
    const char base_digits[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    int converted_number[64];
    long int number_to_convert;
    int next_digit, base, index = 0;

    printf("type a number to be converted: \n");
    scanf("%ld", &number_to_convert);

    printf("Base\n");
    scanf("%i", &base);

    do 
    {
        converted_number[index] = number_to_convert % base;
        ++index;
        number_to_convert = number_to_convert / base;
    }
    while (number_to_convert != 0);

    // now display the number
    printf("converted number =  :");

    for (--index; index >= 0; --index ) 
    {
        next_digit = converted_number[index];
        printf("%c", base_digits[next_digit]);
    }

    printf("\n");
    return 0;
}

我无法理解最后一个for循环。它应该有助于扭转阵列,但我不明白如何!

这一行是什么意思:for (--index; index >= 0; --index)

1 个答案:

答案 0 :(得分:1)

回想一下for标题有三个部分:

  • 在循环之前执行一次的声明/初始化部分,
  • 在每次迭代之前执行的结束条件检查程序,
  • 将循环前进到下一次迭代的部分

通常,声明/初始化部分设置一个新的循环变量。但是,不要求这样做。特别是,当多个循环共享相同的循环变量时,初始化部分会调整现有值或完全丢失。

这正是您所处的情况。 do / while循环将index推进到数组末尾之后的converted_number。如果需要从index的后面开始处理,则需要在进入循环之前递减while,然后在每次迭代时递减它。

请注意,另一种可能性是在index上使用while (index > 0) { next_digit = converted_number[--index]; printf("%c", base_digits[next_digit]); } 循环预先减少:

{{1}}