1、单引号 (')
用于表示单个字符常量。单引号内只能有一个字符,表示该字符的ASCII值或者Unicode值。在C和C++中,字符常量的类型是 char
,通常占用1
个字节。
1)基本字符常量
#include <stdio.h> int main() { char c = 'A'; // 将字符 'A' 赋值给变量 c printf("字符: %c\n", c); // 输出:字符: A printf("字符的ASCII值: %d\n", c); // 输出:字符的ASCII值: 65 return 0; }
2)字符常量的类型是 char
#include <stdio.h> int main() { char c1 = 'a'; // 'a' 的ASCII值是97 char c2 = '1'; // '1' 的ASCII值是49 char c3 = '+'; // '+' 的ASCII值是43 printf("字符 c1: %c, ASCII值: %d\n", c1, c1); printf("字符 c2: %c, ASCII值: %d\n", c2, c2); printf("字符 c3: %c, ASCII值: %d\n", c3, c3); return 0; }
3)字符常量与整型操作
#include <stdio.h> int main() { char c = 'A'; // 'A' 对应的ASCII值是 65 if (c == 65) { printf("字符 c 的值是 A\n"); // 输出:字符 c 的值是 A } return 0; }
4)字符常量与转义字符
#include <stdio.h> int main() { char newline = '\n'; // 使用转义字符表示换行 char tab = '\t'; // 使用转义字符表示制表符 printf("Hello%cWorld\n", newline); // 输出:Hello(换行)World printf("Column1%cColumn2\n", tab); // 输出:Column1(制表符)Column2 return 0; }
2、双引号 (")
用于表示字符串常量,即字符数组。双引号内的内容是一个以null
字符 ('\0'
) 结尾的字符数组,表示字符串。在C和C++中,字符串常量的类型是 const char[]
,即一个字符数组。
1) 字符串赋值
#include <stdio.h> int main() { // 定义一个字符串常量 const char *str = "Hello, World!"; // 打印字符串 printf("%s\n", str); // 输出: Hello, World! return 0; }
2)字符串连接
C和C++中,字符串常量可以直接连接,编译器会将它们合并为一个字符串。
#include <stdio.h> int main() { const char *str1 = "Hello, "; const char *str2 = "World!"; // 使用printf打印两个字符串 printf("%s%s\n", str1, str2); // 输出: Hello, World! return 0; }
3)字符串常量和字符数组
C和C++中,字符串常量其实是以 const char[]
形式存储的,可以通过字符数组来操作它们。
#include <stdio.h> int main() { // 字符数组存储字符串常量 char str[] = "Hello, World!"; // 修改字符数组中的内容 str[7] = 'w'; printf("%s\n", str); // 输出: Hello, world! return 0; }
4)字符串与字符数组的区别
#include <stdio.h> int main() { const char *str1 = "Hello, World!"; // 字符串常量 char str2[] = "Hello, World!"; // 字符数组 printf("str1: %s\n", str1); // 输出: Hello, World! printf("str2: %s\n", str2); // 输出: Hello, World! // 修改字符数组中的字符 str2[7] = 'w'; printf("Modified str2: %s\n", str2); // 输出: Hello, world! return 0; }
5)字符串常量与std::string(C++特有)
C++中,std::string
是一种更为常用的字符串类型,它在内存中以字符串常量的方式初始化,但提供了更多操作字符串的功能。
#include <iostream> #include <string> int main() { std::string str = "Hello, C++!"; // 使用std::string进行字符串操作 str += " How are you?"; std::cout << str << std::endl; // 输出: Hello, C++! How are you? return 0; }
6)字符串和字符数组的内存分配
#include <stdio.h> int main() { const char *str1 = "Hello"; // 字符串常量,存储在只读数据区 char str2[] = "Hello"; // 字符数组,存储在栈上 // 打印两者的地址 printf("Address of str1: %p\n", (void*)str1); // 输出: Address of str1: (只读区地址) printf("Address of str2: %p\n", (void*)str2); // 输出: Address of str2: (栈区地址) return 0; }
3、区别
特性 | 单引号 (' ) | 双引号 (" ) |
---|---|---|
用途 | 字符常量(单一字符) | 字符串常量(字符数组) |
类型 | char | char[] (或 const char[] ) |
长度 | 只能包含一个字符 | 可以包含零个或多个字符(加上空字符 \0 ) |
示例 | 'A' ,'1' ,'\n' | "Hello" ,"World" |
空字符终止符 | 不适用 | 自动添加空字符终止符 (\0 ) |
示例代码,
#include <stdio.h> int main() { // 使用单引号:字符常量 // 'A' 是字符常量,表示字符 'A',其类型为 char char charVar = 'A'; // 使用双引号:字符串常量 // "A" 是字符串常量,表示字符数组 "A\0",其类型为 const char[] const char* strVar = "A"; // 打印字符和字符串 // 输出:字符变量 charVar: A printf("字符变量 charVar: %c\n", charVar); // 输出:字符串变量 strVar: A printf("字符串变量 strVar: %s\n", strVar); // 比较字符与字符串的第一个字符 if (charVar == strVar[0]) { // 输出:字符和字符串的第一个字符相同。 printf("字符和字符串的第一个字符相同。\n"); } // 字符常量与字符串常量的区别 // 输出:字符常量 'A' 的 ASCII 值: 65 printf("字符常量 'A' 的 ASCII 值: %d\n", charVar); // 输出:字符串常量 "A" 的长度: 1 printf("字符串常量 \"A\" 的长度: %zu\n", strlen(strVar)); return 0; }