教科书上的一段小程序,请大佬帮忙看看为什么要引入额外的变量?

以下小程序是从某教科书上扒下来的,功能以空格为判断依据,判断输入字符串有多少个单词。

但是我不明白为什么为什么要引入变量c?直接使用string[i]有什么不妥么? 

#include <stdio.h>

int main()
{
    char string[81];
    int i, num=0, word = 0;
    char c;
    gets_s(string);
    for (i = 0; (c=string[i]) != '\0'; i++)
        if (c == ' ')word = 0;
        else if (word == 0)
        {
            word = 1;
            num++;
        }
    printf("there are %d words in this line.\n", num);
    return 0;    
}

 

一是为了美观,写代码尤其是在一个项目组里开发,还得考虑代码的整洁易读。

二是用一个c来存string[i]的值,也能在第二次引用这个值的时候少做一次查找,当然也就多占了一份内存。

可以直接使用string[i]

可以直接使用string[i]进行判断,而使用临时变量的原因可能是方便用户观看,无实际用处!望采纳!

我一直有个疑问,就是就比如这个代码里的,访问c的速度,和访问string[x]的速度是不是一样?还有例如一个结构体X,里面嵌套了一个结构体Y,Y里面有一个int变量a,另有int c=X.Y.a,然后访问c和访问X.Y.a的速度,是否一样?如果访问X.Y.a的过程还存在两次寻址,那么肯定会慢……

我的主语言是java并不是c, 但是我觉得你这是接近编译原理的东西,跟语言的关系并没有那么大,局部变量表 应该都是会压栈和出栈的,string[i] 是个数组 char c是个字符,两者的引用都在栈中,不同的是c从栈里可以直接就拿到值,string[i]只是拿到数组首地址,然后在使用指针偏移才拿到的第i个值,这样看当然c快。

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632