C语言中的单引号(‘‘)与双引号(““)代表什么

直接步入正题:C语言中 '  ' 和 "  " 所代表的的有何不同呢?

        用单引号引出的一个字符本质上代表的就是一个整数,整数的数值由编译器的字符集来表示。比如ASCLL字符集的编译器下 ,字符 'A' 的含义就是 十进制的 65

	char ch1 = 'A';
	int ch2 = 65;
	printf("%dn", ch1); //以整数形式打印字符'A'
	printf("%cn", ch2); //以字符的形式打印整数'65'

        用双引号引出的字符串本质上代表的是一个指向无名数组起始字符的指针,这个被双引号引起来的“数组”中被所有的字符以及字符末尾额外的 ‘’ 初始化。下面这两种方式是等效的。

	char arr1[] = { 'h','e','l','l','o','n',0}; //0就是'',''的ASCLL值是0
	printf("hellon");
	printf(arr1);

    //下面这是另外两种初始化方式
	char arr2[] = "hello"; //字符数组初始化,后面也有'',被隐藏
	(const) char* ptr = "hello";//字符指针初始化,一般要加const,此时初始化成常量字符串
	printf(arr2);               //hello不可修改,指针指向的是首字符h的地址
	printf(ptr);

因为单引号括起的一个字符代表整数,而双引号括起的一个字符则是指针,如果单、双引号混用,可能引起一些难以预料的错误。

int 型数据一般是 16,32位,char 类型一般 8 位;所以有些编译器可能会允许字符类型包含多个字符。比如 如下代码

	int n1 = "hello world";
	int n2 = 'helo'; //32位下只能存放<=4个字符
    
	printf("%sn", n1); // 打印出 hello world  但是也会有警告 n1应为 char*类型
	printf("%cn", n2); // VS编译器下 只能打印最后一个字符 o
    printf(n2); //则会触发警告 n2 应为 const char* 类型,但是实际上n2是int类型

确实可以用int类型存char,但是调用内存能发现,n1 表示了一个整数,这个整数会随着字符串的改变而改变,但是与字符串之间没有直接的联系。

        而在VS, GCC编译器中对于 int n2 = 'helo';的做法则是,用后一个字符覆盖前一个字符,最后得到的整数值即为最后一个字符的整数值,所以会打印出来字符 'o' 。


        平常也要注意起单双引号的问题,规范的初始化代码哦。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>