加引号的数字不是数字,是字符,也可以叫做是字符的ASCII码,数组下标只能是数字
而你的c一定定义为了一个char(或unsigned char)类型,所以如果直接用ndight[c]
当你输入0时,相当于是ndight[48](字符0的ascii码为48)
‘0’代表了48,如果你用c-48那么,一个0~9的字符,就会变成0~9的数字
这样你输入0,那么就相当于ndight[0]了
补充:
c定义为int在使用scanf("%d",&c);时,你输入的0那么在内存中保存的就是0
不需要用引号,所以的引号都可以去掉
当然如果你的程序的用途不是判断输入是否为0~9的功能时,可能仍需要用引号完成你需要的功能逻辑
因为你的c变量是字符类型,需要比较的是字符c和字符0和字符9
如果不加引号,那么就是将c转换为整形数字和数字0,9比较大小
加引号意思是将字符c和字符0,9的ACSII码进行比较
加单引号的都表示是一个字符,即char类型的数据,可以理解为ASCII码,例如‘0’实际是48;
ndight[c-‘0’]==ndight[68-48]==ndight[20],而ndight[c]==ndight[68]
加单引号表示字符类型,存放的是ASK码。
-'0'表示减去0的ASK码,将字符转换成数字。希望回答能帮到你