|
发表于 2022-5-14 08:07:51
|
显示全部楼层
本帖最后由 胡尔汉 于 2022-5-14 09:19 编辑
printf(“%d”,*s);
打印的是数组s第一个字符的十进制数据
因为计算机内部是通过二进制的形式来存储各种数据,为了能通过0和1来表示各种字符,C使用ascii码来表示字符,比如01100001表示字符'a',比如字符'0'的ascii码是00110000,这串二进制换算成十进制后是48,所以打印出来是48,如果写成%c的话,打印的就是字符'0'
- int x=48;
- char y='0';
- printf("%c",x);
- if(x==y)
- printf("True");
- else
- printf("False");
复制代码 换句话说,上面七行定义了一个整形变量x,值是48,和一个字符变量y,值是'0',但是printf函数里我告诉计算机用字符的形式打印变量x,最后出来的结果实际上是字符'0',甚至判断两个不同类型的变量x是否等于y,也能打印出True的结果,也就是整形48和字符'0'在计算机中的数据是一样的,最后8位二进制都是00110000,只不过两个数据类型的字节长度不同罢了
由于s数组储存的是字符串,这个字符串会在最后添加'\0'来表示字符串已经结束,所以s实际上是"012xy\0",for循环里的s[ i]!=0判断的是s[ i]的数据是不是ascii码里二进制00000000对应的字符,也就是'\0',所以会在字符串s[5]退出循环而不是在s[0]的时候就退出,如果写成s[ i]!='0'就是在s[0]就退出,最后print一下变量i就知道了 |
|