关于C里面 数字0,字符'0',字符串"0",字符串结尾标志符'\0'

首先对于字符,C语言里主要区分的依据是ascii编码表:
    在计算机中,所有的数据在 存储 和运算时都要使用 二进制数 表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用 二进制数 来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫 编码 ),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了 ASCII编码 ,统一规定了上述常用符号用哪些二进制数来表示。
以上百度百科ASCII  http://baike.baidu.com/view/15482.htm
需要明白的是,这里的映射关系式“字符” <-->"数字(编码)",

字符‘0’:
     在这个表中,字符零,也就是C中的 ‘0’ 对应的是48,即,字符零在计算机中的存储是48。也就是说以下代码执行结果是48
      
  1. char czero = '0';
  2. printf("czero = %d\n", czero);
执行结果:    czero = 48

数字0:
      数字类型的数据在计算机中存储即是本身,就是0,看这段代码
     
  1. int izero = 0;
  2. if (izero == czero)
  3. {
  4.     printf("czero = izero\n");
  5. }
  6. else
  7. {
  8.     printf("czero != izero\n");
  9. }
执行结果:   czero != izero

字符串“0”:
    字符串“0”,很好理解,相当于存了两个符号,一个是字符‘0’,一个是字符串结尾标志‘\0’,其实存储的十进制数就是数字0

字符串结尾标志‘\0’:
    虽然,大家都是这么说的,但其实,这里'\0',中的反斜线 \ 可以当做转义符,其实就是转义符,跟 \\ 表示 \,\' 表示 ' 一样,\0 表示的就是 0,但是别忘记了这里的 \0 是字符类型的,相当于裸0(我自己想的名字==),也就是数字0,数字0对应着哪个字符呢,查看下ASCII表格,发现第一个就是,NULL,这样也好理解了,在读取字符串的时候,末尾是NULL,但是必须有这个NULL,才能告诉编译器字符串结束了。

嗯,就是这样,另外多说一些:
对于memset,
      memset(*dst, 0, size)  和  memset(*dst, '\0', size)效果是一样的,但是和memset(*dst, '0', size)不一样。
       
      查看memset的定义:    
            oid *memset(void *s, int ch,  size_t n);
             函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
            memset:作用是在一段内存块中填充某个给定的值,它是对较大的 结构体数组进行清零操作的一种最快方法。

       好吧,还是来自百度百科 http://baike.baidu.com/view/982208.htm
      第二个本来就是数字啊,数字 0 和 字符'\0' 换成十进制数字都是0,但是字符'0'换算成数字是48,这也就可以理解了。要不做个试验:

  1. char szName[10];
  2. memset(szName,50, 10)
  3. printf("szName = %s", szName);
这段代码的输出是,一串的222222222222222222222222222,不止10个,
一、输出2是因为,ASCII值50,对应的字符是2
二、输出多余10个2,是因为我们把字符串结尾标志也memset掉了。
嗯,虽然memset一般是用来初始化的,这时,直接用memset(*dst, 0, size)就行。




<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(10) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值