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;
}