C语言中的单引号用来表示字符字面量,C语言中的双引号用来表示字符串字面量。
'a'表示字符字面量,在内存中占一个字节
'a' + 1 表示'a'的ASCII码加1,结果为'b'
"a"表示字符串字面量,在内存中占两个字节
"a" + 1表示指针运算,结果指向"a"结束符'\0'
下面的程序合法吗?
char *p1 = 1;
char *p2 = '1';
char *p3 = "1";
#include <stdio.h>
int main()
{
    char* p1 =  1 ;
    char* p2 = '1';
    char* p3 = "1";
    printf("%s, %s, %s", p1, p2, p3); // 会发生segmentation fault,p1和p2处于内存的低地址内存空间
    printf('\n'); // 会发生segmentation fault,访问内存的低地址空间
    printf("\n");
    return 0;
}
输出结果:

小贴士:


#include <stdio.h>
int main()
{
    char c = " ";
    while( (c == "\t") || (c == " ") || (c == "\n") )
    {
        scanf("%c", &c);
    }
    return 0;
}
输出结果:

看上去,while内部没有被执行,为什么?
下面的语句发生了什么?
char c = "string";
分析
上述代码将双引号改成单引号即可正常工作。
本文链接:http://so.lmcjl.com/news/23791/