在C语言里,char类型是用来存储单个字符的数据类型,它的赋值方式有多种,不同场景下的赋值逻辑存在差异,下面逐一介绍常见的赋值方法。

直接赋值字符字面量
最直接的方式是将字符用单引号包裹后赋值给char变量,这种方式可读性最强,适合已知具体字符的场景。
#include <stdio.h>
int main() {
char c1 = 'a'; // 赋值小写字母a
char c2 = '1'; // 赋值数字字符1
char c3 = 'n'; // 赋值换行转义字符
printf("c1: %c, c2: %c, c3的ASCII值: %dn", c1, c2, c3);
return 0;
}
这里要注意,单引号内只能放单个字符,放多个字符会导致未定义行为,比如char c = 'ab';是不符合规范的写法。
通过ASCII码值赋值
因为char类型本质存储的是字符对应的ASCII码整数值,所以也可以直接把整数赋值给char变量,整数会自动转换为对应的字符。
#include <stdio.h>
int main() {
char c1 = 97; // 97对应ASCII码的字符a
char c2 = 48; // 48对应ASCII码的数字字符0
printf("c1: %c, c2: %cn", c1, c2);
return 0;
}
需要注意赋值整数的范围,如果超出char类型的表示范围,会发生截断,比如给char类型赋值超过127的正整数,实际存储的值可能是负数(取决于编译器是否把char当作有符号类型)。
从字符串中赋值
如果有一个字符串,想取其中某个位置的字符赋值给char变量,可以通过字符串下标访问实现。
#include <stdio.h>
int main() {
char str[] = "hello";
char first_char = str[0]; // 取字符串第一个字符h赋值
char third_char = str[2]; // 取字符串第三个字符l赋值
printf("first_char: %c, third_char: %cn", first_char, third_char);
return 0;
}
这里要注意字符串的下标从0开始,访问时不要超出字符串的长度范围,否则会访问到非法内存。
通过输入函数赋值
实际开发中经常需要从用户输入获取字符赋值给char变量,常用的函数有scanf和getchar。
使用scanf赋值
#include <stdio.h>
int main() {
char c;
printf("请输入一个字符:");
scanf("%c", &c); // %c格式说明符读取单个字符
printf("你输入的字符是:%cn", c);
return 0;
}
使用getchar赋值
#include <stdio.h>
int main() {
char c;
printf("请输入一个字符:");
c = getchar(); // getchar直接读取输入的单个字符
printf("你输入的字符是:%cn", c);
return 0;
}
使用scanf时要注意,如果之前有输入过换行符,可能会被%c读取到,需要提前处理输入缓冲区的问题。
赋值注意事项
- char变量的大小通常是1字节,赋值时要确保值的范围符合当前编译器中char的有符号性设定。
- 不要把字符串直接赋值给char变量,比如
char c = "a";是错误的,因为双引号表示的是字符串地址,不是单个字符。 - 转义字符赋值时要使用正确的转义格式,比如赋值单引号字符要写成
char c = ''';,避免语法错误。