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

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

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

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

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

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

    //下面这是另外两种初始化方式
	char arr2[] = "hello"; //字符数组初始化,后面也有'\0',被隐藏
	(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("%s\n", n1); // 打印出 hello world  但是也会有警告 n1应为 char*类型
	printf("%c\n", n2); // VS编译器下 只能打印最后一个字符 o
    printf(n2); //则会触发警告 n2 应为 const char* 类型,但是实际上n2是int类型

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

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


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

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值