C语言中的单引号和双引号的区别

 

首先肯定地说,二者是有区别的,不是说用谁都一样。

1、实质区别,代表的含义不同

'A'代表的是一个整数,而且这个整数对应的是编译器所采用的字符集中的字符序列对应的数值。所以'A'跟ASCII中的65意义是相同的。

 1 # include <iostream>
 2 
 3 using namespace std;
 4  
 5 int main(int argc, char const *argv[])
 6 {
 7     char str1 = 'A';
 8 
 9     int str2 = 65;
10 
11     cout<<str1<<endl<<(char) str2<<endl;
12     
13     return 0;
14 }

2、占用的内存空间大小不同

 1 # include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main(int argc, char const *argv[])
 6 {
 7     char str1 = 'A';
 8 
 9     char str2 = "A";
10 
11     cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;
12 
13     return 0;
14 }

大家猜一猜输出的str1的大小是多少?str2输出的大小是多少?

????????????????????????????

不用猜了,为啥,因为编译不了啊。怎么会编译不了?因为编译器报错了。

看出了因为啥了吗?我英文差,估计应该是说第9行,定义的一个字节存不下,建议你定义两个字节,就是char str2[2]来存放"A"。明明"A"应该占用一个字节啊?为啥要给他分配两个字节的空间呢?

因为这里系统会在字符串的尾端默认添加一个二进制为0的字符'\0',其实它就是一个转义字符。

 1 # include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main(int argc, char const *argv[])
 6 {
 7     char str1 = 'A';
 8 
 9     char str2[2] = "A";
10 
11     cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;
12 
13     return 0;
14 }

转自 https://www.cnblogs.com/arvintang/p/5115698.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值