码迷,mamicode.com
首页 > 其他好文 > 详细

C之单引号和双引号(十三)

时间:2018-04-10 04:26:10      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:C语言   单引号   双引号   

        在 C 语言中,我们会经常使用到单引号和双引号那么单引号用来表示字符字面量,双引号是用来表示字符串字面量

        'a' 表示字符字面量,在内存中占1个字节; 'a' + 1表示 'a' 的 ASCII 码加1,结果为 'b'。

        "a" 表示字符串字面量,在内存中占2个字节;"a" + 1表示指针运算,结果指向"a"结束符'\0'。

        字符字面量在 C 语言中国被编译为对应的 ASCII 码,字符串字面量被编译为对应的内存地址。printf 的第一个参数被当成字符串内存地址,内存的低地址空间不能在程序中随意访问。下图表示三种写法的地址

技术分享图片

        我们接下来看个示例代码,代码如下:

#include <stdio.h>

int main()
{

    char c = " ";
    
    while( (c == "\t") || (c == " ") || (c == "\n") )
    {
        scanf("%c", &c);
    }
    
    return 0;
}

        我们这段代码是想实现当用户输入 tab 键、空格或者回车时,程序继续循环执行。当用户随便输入字母或者数字什么的,程序就执行完毕。我们来编译下看看结果是否如此

技术分享图片

        并没有实现这个功能,显然编译出了3个警告,而且我们运行后程序仿佛没执行while循环。我们再来仔细分析下这个程序,我们上面 char c = " "; 相当于 char c = "string"; 程序编译后字符串"string"的内存地址被赋值给变量 c;内存地址占 4 个字节,而变量 c 只占1个字节;由于类型不同,赋值后产生截断。那么我们如何解决这个问题呢?只需将所有的双引号换成单引号即可,我们再次编译,得到结果如下:

技术分享图片

            我们看到程序没有编译错误,运行后效果也是我们所期望的。今天我们学习了单引号和双引号的相关知识,总结如下:1、单引号括起来的单个字符代表整数,双引号括起来的字符代表字符指针;2、C 编译器接受字符和字符串的比较但无任何意义,允许字符串对字符变量赋值,只能得到错误后面我们会继续对 C 语言的学习。


         欢迎大家一起来学习 C 语言,可以加我QQ:243343083

C之单引号和双引号(十三)

标签:C语言   单引号   双引号   

原文地址:http://blog.51cto.com/12810168/2096289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!