字符与字符串

之前一直在想字符与字符串之间的区别,虽说是一件比较简单的事,但是却一直无法系统的讲出来。

刚看到一篇文章,现在总结一下,和大家分享一下。

具体是这样的:在单引号中的一个字符是编写整数的另一种方法。这个整数是给定的字符在实现的对照序列中的一个对应的值。因此,在一个ASCII实现中,'a'和0141或97表示完全相同的东西。而一个包围在双引号中的字符串,只是编写一个有双引号之间的字符和一个附加的二进制值为零的字符所初始化的一个无名数组的指针的一种简短方法。

下面的两个程序片断是等价的:

printf("Hello world/n");

char hello[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '/n', 0 };

printf(hello);

由于一个整数通常足够大,以至于能够放下多个字符,一些C编译器允许在一个字符常量中存放多个字符。这意味着用'yes'代替"yes"将不会被发现。后者意味着“分别包含y、e、s和一个空字符的四个连续存储器区域中的第一个的地址”,而前者意味着“在一些实现定义的样式中表示由字符y、e、s联合构成的一个整数”。这两者之间的任何一致性都纯属巧合。

如下程序:

#include 
  
  


   
   int main(
   
   int argc, 
   
   char *argv[])

{

        unsigned 
   
   long a = 
   
   'yes';

        printf(
   
   "%d/n",
   
   sizeof(a));

        printf(
   
   "a is %d/n",a);

        printf(
   
   "a hex is %x/n",a);

        
   
   return 0;

}
  
  

输出结果如下:

字符与字符串

说明:

字符对应的二进制如下:

‘y’               ‘e’                       ’s’

01111001       01100101         01110011

作为一个整体十进制十进制数就是7955827

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值