首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个语句背后的逻辑是什么: for (- index;index >= 0;-index)?

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

Stack Overflow用户
提问于 2017-10-21 21:32:25
回答 1查看 141关注 0票数 1

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

代码语言:javascript
复制
#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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-21 21:37:07

回想一下,for头有三个部分:

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

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

这正是你所处的情况。do/while循环将index提升到数组结束后的1。如果您需要从converted_number后面开始处理,则需要在进入循环之前减少index,然后在每次迭代时也减少它。

请注意,另一种可能是在while上使用带有预减量的index循环。

代码语言:javascript
复制
while (index > 0) {
    next_digit = converted_number[--index];
    printf("%c", base_digits[next_digit]);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46868312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档