关于0,'0','\0'的问题
有人可以 给我解释一下关于这个char s[]={"012xy"};
这个字符串的0代表的十进制是48 还是 0?
为什么呢?
参考代码:
#include <stdio.h>
#include <string.h>
int main()
{
int count=0;
char s[]={"012xy"};
printf("%d",*s);
#if(1)
for(int i=0;s!=0;i++)
{
if((s>='a'&&s<='z')||(s>='A'&&s<='Z'))
{
count++;
}
}
#endif
printf("%d",count);
} %d读48, %c读是0 本帖最后由 tyf1218405122 于 2022-5-12 20:58 编辑
ba21 发表于 2022-5-12 20:46
%d读48, %c读是0
我先自己理一下 ba21 发表于 2022-5-12 20:46
%d读48, %c读是0
#include <stdio.h>
#include <string.h>
int main()
{
int count=0,i=0;
char s[]={"012xy"};
// printf("%d",*s);
#if(1)
for(i=0;*(s+i)!=0;i++)
{
if((*(s+i)>='a'&&*(s+i)<='z')||(*(s+i)>='A'&&*(s+i)<='Z'))
{
count++;
}
}
#endif
printf("%d",count);
}
从上面的代码运行结果看;
字符串s中的0 和我下面的那个for循环中判断条件的0是不同的;
那么意思就是说在判断的时候取得字符串s中0那个值是48,不是0;
为什么取得是48 而不是 0呢? tyf1218405122 发表于 2022-5-12 21:04
#include
#include
int main()
字符和数字能分清不?
0 '0' 你怎么看? 学习到了,加油。。 学习了,加油!! {:10_245:}{:10_245:}{:10_245:}{:10_245:}10%,有点低啊,中一个吧 {:10_266:} tyf1218405122 发表于 2022-5-12 21:04
#include
#include
int main()
0、'0'、和 '\0' 的分别:
0 就是数字零,与其余两个不同,不要怀疑,这是我们小时候就开始学习的零。一共有 10 个数字,分别是 0、1、2、3、.....、9
以下两种都是字符,只是编码不同而已。
'0' 是字符,编码是 48,一共有 128 个字符,这里就是俗称的 ASCII 编码。虽说有 128 个 但真正能打印的只有 95 个字符(也就是你键盘上看到的所有字符,你可以自己数数看),如果是 EASCII 则是 256 个字符(但这不重要)。
'\0' 是空字符,如上,编码是 0,也写作 NUL,也是 128 个 ASCII 编码之一,属於控制符,不能打印。 下次用下代码块发代码{:10_245:} {:10_266:} 666666666666666 本帖最后由 胡尔汉 于 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退出循环而不是在s的时候就退出,如果写成s[ i]!='0'就是在s就退出,最后print一下变量i就知道了 在这个字符串"012xy" 中这个 0 是以ASCII码存储 你以%d读取 获取到的就是ASCII码值 ,以%c读取获取到的就是字符 'c' {:10_312:} 0,代表数字,int型
‘0‘,代表字符,char型
’\0‘,可以代表转义字符,一般用在字符串中最后一位,代表该字符串的结束字符
代码中的0,首先看类型,是char型,那就是ASCLL码的,即ASCLL码的编号48 顶 数字0,字符‘0’,空字符'\0' {:5_90:}
页:
[1]
2