qihuanye-229110

转自:https://blog.csdn.net/janmesyang/article/details/87995761

笔者:一直以来我都不是很清楚字符串常量,今天有幸接触到,就顺便也转发一些别人的博客。这些博客来说,算作我自个的学习内容,假如以后能被别人看到,并且有所帮助的话,我相信这是所有热爱分享热爱技术的人最开心看到的事。

 

转发内容:

字符常量:一个用单引号括起来的单个字符(或字符转义序列或三字母词)

实质(含义):是一个整形值。属于四大基本数据类型(分别是整型,浮点型,指针,聚合类型)中的整型(integers)。  如‘a\',   \'\n\',   \'??!\',   \'\24\' 

对于字符常量,在计算机里面实质上是由ASC码存储的。那么字符串是怎么存储的呢?也是由一串一串的

 

 针对上面四个例子逐一讲解:

     1. 第一个’a\'似乎没什么好说的,严格满足定义。(有一点想说一下,\'abc\'到底算不算字符常量呐?在《C与指针》中说这种情况属于多字节字符常量,并不违反标准,但由于在不同环境下可能不一样,并不鼓励使用。我在VC上试了一下,含有\'abc\'的程序的确可以运行,不过它对应的整形数据等于’c\'(即尾字母对应的整形数据) 

     2. 第二个’\n\'牵扯到字符转义序列,转义序列由一个反斜杠\加上一或多个字符构成。   \n,\t,\\,\?等。其详细含义此处不再赘述。那么‘\n\'究竟代表什么呐?我准备在实践中检验一下

于是我进行了如下代码(并且把\?\'换为其他‘诸如此类单引号下是转义序列的字符常量)发现它竟然就是’?\'对应的ASCII码值。其它的经检验也都相同。但是如果只是随意的如’\r\'(引号内并非转义序列则不会得到与\'r\'相同的结果)。

 

#include<stdio.h>

#include<Windows.h>

int main(void)

{

    char i;

    i = \'\?\';

    printf("%d", i);

    Sleep(10000);

    return 0;

}  

 

      3. 第三个‘??!\'牵扯到三字母词。三字母词就是几个字符的序列,合起来表示另一个字符。

 

                                     如下

 

三字母词 对应字符

??/ \

??! |

??) ]

??( [

??> }

??< {

??= #

??- ~

               所以\'??!\'\'|\'对应的ASCII码值相同

 

      4. 第四个只需要知道在C语言中用”\+数字“如(\40)来表示相应八进制数代表的字符,用“\x+数字”来表示相应十六进制数代表的字符。在《C与指针》中讲转义序列时说

 

         \ddd,其中三个d均是八进制数字,这个转义符表示的字符既是给定八进制数值代表字符。如\40对应十进制32,则其代表ASCII码值为三十二的字符即 空格。注意:\' \',引号中间是一个空格也属于字符常量。

 

         \xddd与上类似,只是将八进制转化为十六进制。如\x20对应十进制32,同样表示空格这个字符。                                                      注意:C语言中,所有字符常量都作为整形量来处理(即字符型数据与整形数据可通用)如 char i;   i=\'a\'-32;   printf("%c",i);则将输出’A\'                                                                                                                                                                    或者printf("%d",i);则将输出65

 

         int i;                                                                                                                                                                                                   i=\'a\'-32;  

 

  printf("%c",i);将输出\'A\'                                                                                                                                                                       或者printf("%d",i);则将输出65

 

附:常用ASCII码值: \'a\'~\'z\'    97~122  

 

                                    \'A\'~\'Z\'     65~90                                

 

                                    \'0\'~\'9\'      48~57

 

 字符串常量 :   由一个双引号括起来若干字符的序列(在这里若干可表示01...)

 

       "hello world","C language programming",   "a"   , "123.45",均合法。                                                                                     注意:1.字符串常量不能被赋值,同时字符串常量不能对值修改  

 

           2.字符串常量在内存中占若干字节(至少一个字符结束标志)占字节数等于字符串中字节数加一。在C语言中系统会在每个字符串的最后自动加一个\'\0\'(本身并不看作是字符串的一部分)作为字符串的结束标志。如\'\'hello"在内存中占六个字节。

 

           3.无字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组。用数组中每一个元素存放一个字符。如char a[]="hello";          

 

            4.属于静态存储类,在整个程序运行中只存储一份。

 

       

 

分类:

技术点:

相关文章:

  • 2022-02-28
  • 2021-10-14
  • 2022-12-23
  • 2022-01-08
  • 2022-01-16
  • 2022-12-23
  • 2021-11-28
猜你喜欢
  • 2021-10-24
  • 2021-12-29
  • 2022-02-01
  • 2022-03-01
  • 2021-12-05
  • 2021-12-29
  • 2022-01-31
相关资源
相似解决方案