《C程序设计语言》第四章计算器程序getop函数没有看懂,哪位好心人能帮我这个小白解决一下?

在书中的位置是66页,原代码如下:

 /* 获取下一个运算符或者数值操作值*/
int getop(char s[])
{
    int i,c;

    while((s[0]=c=getch())==' '||c=='\t') //跳过空格与换行符 
        ;
    s[1]='\0';                          //????? 
    if(!isdigit(c)&&c!='.')             //不是数,也就是说是运算符? 
        return c;
    i=0;
    if(isdigit(c))                      //收集整数部分 
        while(isdigit(s[++i]=c=getch()))
            ;
    if(c=='.')                          //收集小数部分 
        while(isdigit(s[++i]=c=getch()))
            ;
    s[i]='\0';
    if(c!=EOF)
        ungetch(c);
    return NUMBER;
 } 

我不太明白 s[1]='\0'; 这个语句有什么意义,在收集整数和小数的时候这个语句存入的数据又会被覆盖,所以为什么要加这个语句?
还有一个语句我不太清楚它的意思。

    if(!isdigit(c)&&c!='.')             
                    return c;

书中注释是“不是数”,那么也就是说它是运算符了?这个我是想确认一下。

如果哪位能解决我的问题,我真是感激不尽!

因为这里定义的s是一个字符数组,而不是字符串常量。这两个东西有唯一的区别:字符串常量在系统中保存的时候以字符数组的形式保存,会自动添加'\0'。
所以这个程序的变量s,如果在下一条if语句返回的话,必须在s结尾添加'\0'以此作为字符数组的结尾。
简单来说,声明一个字符串常量,可以没有空字符。但是声明字符数组,结尾必须是空字符。

\0设置字符串结束
不是数,也就是说是运算符,如果程序不包含非法输入的情况,那么不是分割符、数字、小数点,那么肯定只有运算符了。因此可以这么理解。

另外你的程序应该不支持括号吧。