字符是什么
共分为4种
字母:a b c ... z
数字:0 1 2 3 ... 9
标点:+ - * / . ; ,等等
控制字符:Tab, Enter等等
用ascii码来表示以上字符,例如65 <=> 'A',97 <=> 'a',48 <=> '0',49 <=> '1',43 <=> '+',32 <=> ' '(这里是空格),9 <=> '\t'等等。
#include "stdio.h"
int main()
{
printf("%c %c \n", 'A', 65);
printf("%c %c %c", '1', ' ', '2');
return 0;
}
/*
//run out:
A A
1 2
*/
字符数组
字符数组最后是有一个结束符0或者'\0',所以char str[6]的数组长度为6,但只能存储5个字符。
#include "stdio.h"
int main()
{
//初始化第一种方式
char str[6] = {'b', 'e', '1', '2', 'o', '\0'};
//第二种方式
char str1[5] = "hell";
//第三种方式
char str2[] = "aa";
//char str3[6] = {'b', 'e', '1', '2', 'o', 'B'};不会报错,但是由于没有结束符,printf会一直读取内存,然后直到遇到结束符0为止。这时这段代码就不可预测,所以不能这样使用。
printf("%c \n", str[4]);
printf("%s \n", str1);
printf("%s", str2);
return 0;
}
/*
//run out;
o
hell
aa
*/
注意事项:
1)数组足够大,有效字符串最大长度=数组长度-1;
2)不以0结束的字符串,不是正常的字符串;
3)0之后的字符不会被打印出来。
不妨看个例子巩固下:
#include "stdio.h"
int main()
{
char str[6] = {'b', 'e', 0, '2', 'o', '\0'};
char str1[5] = "hell";
printf("%c \n", str[4]);
printf("%s \n", str1);
printf("%s", str);
return 0;
}
/*
//run out:
o
hell
be
*/
从结果可以看出,打印单个字符str[4]时,结果依旧为o,这表明str所有都被初始化了。而使用prinft在打印整个str时,只打印了be,这是因为printf遇0就停了。