Blogger Information
Blog 28
fans 0
comment 2
visits 52125
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
关于C语言的单、双引号
耶和华信徒的博客
Original
1435 people have browsed it

在网上进行了搜索发现,单引号对于引起来的内容当作了整型,双引号对于引起来的内容当作字符串,由于刚开始学习C语言,对于里面提到一些其他更为详细的解释并没有真真理解到,下面内容为转载CSDN中‘u013541620的专栏’供大家学习;

’’引起的一个字符代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值;””引起的字符串代表的是一个指向无名数组起始字符的指针。对这两个符号产生了兴趣,遂打开VS2010查看了单引号、双引号引起的字符在内存中的存储形式。

实验方式很简单,分别查看”yes”/’yes’/’ye’/’y’四种字符在内存中的存储形式,代码如下:

int _tmain(int argc, _TCHAR* argv[])

{

char test1[] = "yes";

int test2 = 'yes';

printf("%x\n", &test2);

int test3 = 'ye';

printf("%x\n", &test3);

int test4 = 'y';

printf("%x\n", &test4);

return 0;

}

实验结果如下:

 

根据内存中的存储形式,发现’’引起的字符串按照整数的存储形式,将第一个字符识别为最高位,最后一个字符识别为最低位,按此顺序存入int变量4个字节的存储空间中;””引起的变量按照第一个字符存储在起始地址处,最后一个字符存储在结束地址处。实验的结果证实了《C陷阱与缺陷》中的描述,那么当’’引起的字符超过4个字节时会出现什么情况呢?再进行一次实验,代码如下:

int _tmain(int argc, _TCHAR* argv[])

{

char test1[] = "yes";

int test2 = 'yes';

printf("%x\n", &test2);

int test3 = 'ye';

printf("%x\n", &test3);

int test4 = 'y';

printf("%x\n", &test4);

int test5 = 'yesa';

printf("%x\n", &test5);

return 0;

}

实验结果如下:

 

根据实验结果可以看到字符超过4个字节,超出了int型存储能力,编译器报错,提示常量字符太多。这样可以有效提醒给程序猿同学,有可能存在符号输入错误,但是没有超过int型存储能力时照单全收,没有任何提示,存在着符号误用的隐患,以后程序出现问题调试会相当麻烦。


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post