我想问一下星p-'0'是什么意思呢?还有他的k为什么是这样算的呢?

#include<stdio.h>
int convert(char *p)
 {/****/
    int k;
    k=*p-'0';
    while(*++p)
    {
        k=k*8+*p-'0';
    }
    return k;
  /****/}
main()
{
    char s[6];void NONO();
    int a;
    printf("请输入一个8进制数字的字符串: ");
    gets(s);
    
    a=convert(s);
    printf("%d\n",a);
    NONO();
}

void NONO()
{
  FILE *rf, *wf; int a=0;
    char s[6];
    rf=fopen("d:\\programC\\3\\in.dat","r");
    wf=fopen("d:\\programC\\3\\out.dat","w");
    for(int i=0;i<5;i++)
    {
      
      fscanf(rf,"%s",s);
      a=convert(s);
      fprintf(wf,"%d\n",a);
    
    }
    fclose(rf);
    fclose(wf);
}

一个字符类型的数,比如 '2',它减去 '0' 之后,就变成整数类型的  2,就可以进行计算了,与强制类型转换效果相同。

*p 是一个 char 类型的指针,*p - '0'   为   *p 内存储存的字符值减去 '0' 字符的值。 k 这里是输出 *p - '0' 后的 ascii 码。