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

原网址:http://www.cnblogs.com/arvintang/p/5115698.html (若侵权请告知,必删)

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

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

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

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    int str2 = 65;

    cout<<str1<<endl<<(char) str2<<endl;

    return 0;
}

这里写图片描述

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

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    char str2 = "A";

    cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;

    return 0;
}

大家猜一猜输出的str1的大小是多少?str2输出的大小是多少?
????????????????????????????
不用猜了,为啥,因为编译不了啊。怎么会编译不了?因为编译器报错了。
这里写图片描述

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

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

# include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    char str1 = 'A';

    char str2[2] = "A";

    cout<<sizeof(str1)<<endl<<sizeof(str2)<<endl;

    return 0;
}

这里写图片描述

### C语言单引号双引号区别 在C语言编程环境中,单引号双引号用于定义不同类型的字符串或字符常量。具体来说: #### 单引号 `'` 的用途 单引号用来表示字符型数据,即字符常量。一个由单引号括起来的字符会被解释成其对应的ASCII码值或其他编码系统的整数值[^3]。 例如: ```c char ch = 'A'; ``` 这里 `ch` 存储的是字母 A 对应的 ASCII 值 65 而不是实际的文字“A”。 如果尝试打印这个变量,则会显示相应的字符而不是数字形式的ASCII码: ```c printf("%c", ch); // 输出: A ``` 当对字符执行算术运算时,实际上是对其内部存储的数值进行操作。比如 `'a' + 1` 将得到下一个字符 `'b'` 的ASCII码值[^2]。 #### 双引号 `"` 的用途 双引号则被用来创建字符串字面量,也就是一串连续的多个字符组成的数组,并自动在其末尾加上终止符 `\0` 来标记字符串结束位置。这意味着即使只包含一个字符,“X”也会占用两个字节的空间(假设使用8位字符),因为还需要额外的一字节来保存零结尾标志[^1]。 考虑下面的例子: ```c const char *str = "B"; ``` 这里的指针 `str` 指向了一个含有两个元素的字符数组:第一个是大写字母 B (ASCII 66),第二个是空字符 '\0'。 #### 错误示范与修正建议 给定代码片段存在一些错误之处: ```c #include <stdio.h> int main() { char* p1 = 1; char* p2 = '1'; char* p3 = "1"; printf("%s, %s, %s\n", p1, p2, p3); return 0; } ``` 上述程序试图将不同类型的数据赋值给指向字符 (`char`) 类型对象的指针,这可能导致未定义行为。更正后的版本如下所示: ```c #include <stdio.h> int main(void){ const char c1 = 1; // 整形转为字符 const char c2 = '1'; // 字符常量 const char str[] = "1"; // 字符串 printf("'%c', '%c', \"%s\"\n", c1, c2, str); return 0; } ``` 在这个例子中,`c1`, `c2` `str` 都能正确地传递给 `printf()` 函数并按照预期的方式输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值