c语言|c1[i]=i+48为什么能输出0~9

#include"stdio.h"
main()
{    char c1[10],c2[26];
    int i;
    for(i=0;i<10;i++)
    c1[i]=i+48;
    for(i=0;i<26;i++)
    c2[i]=i+'A';
    for(i=0;i<10;i++)
    printf("%c ",c1[i]);
    printf("\n");
    for(i=0;i<26;i++)
    printf("%c ",c2[i]);
    printf("\n");
    
 } 

img


有点不理解为什么

```c++
c1[i]=i+48

```;可以输出0~9,为什么加48呢?c2[i]=i+'A';还有这句也不太理解

因为i是个序数,0-9之间,加上48后就是字符'0'-'9'的ASCII码,其中48就是字符'0'的ASCII码
同样c2[i] = i+'A'也一样,i是序数,0-25之间,'A' + 0就是字符'A','A' + 1就是字符'B'啊。实际都是进行ASCII码相加

这段代码中,c1数组和c2数组分别存储了数字字符和大写字母字符。

在循环中,你可以看到对c1数组的每个元素赋值的语句:

c1[i] = i + 48;
  • 在这句话中,48是ASCII码表中数字'0'的码值。因此,通过将i与48相加,就可以得到从'0'到'9'的十个数字字符的ASCII码值。
  • 换句话说,通过将i与48相加,c1[i]可以存储数字字符'0'~'9'的ASCII码值。

同理,对c2数组的每个元素赋值的语句:

c2[i] = i + 'A';
  • 在这句话中,'A'是ASCII码表中大写字母'A'的码值。因此,通过将i与'A'相加,就可以得到从'A'到'Z'的26个大写字母字符的ASCII码值。

换句话说,通过将i与'A'相加,c2[i]可以存储大写字母字符'A'~'Z'的ASCII码值。