字符串和字符的区别"A"与'A'

假定你要把一个字符常量初始化为字母 A
可使用下列初始化把字符 A 赋给 grade;
char grade = 'A';
单引号中的一个字符是 C 的一个字符常量,编译器遇到‘A’时会将其转换为相应的 编码值,其中单引号是必不可少得且不可用双引号替代。
继续看

char broiled; //声明一个 char 变量
broiled = 'A'; //可以
broiled=A; //不可以!T被看作一个变量
broiled = "A"; // 不可以,“T”被看作一个字符串```


如果不使用单引号,编诇器会将 A 规为一个变量名;如果使用双引号,编诇器将其 规为一个字符串。

那么字符和字符串的内在区别在哪里?

#C规定以字符'\0'作为字符串结束标志# 
'\0'是一个ASCII码为0的字符(当然它并不是字符'0'),它不会引起任何控制动作,也不是一个可显示的字符。而字符串"A"实际包含2个字符:'A'和'\0'

那么如果我们想用字符串 来赋值变量呢?

C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。

定义: char c[10]

字符型与整型互相通用,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, 用整型来定义会浪费空间, 另外这样定义实际意义也不大, 只是为了说明其合法性。

 最简单的方法即逐个赋值: char c[10]={'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 10个字符分别赋绐c[0]到c[9]10个元素。

初值个数小于数组长度,则只将这些字符赋绐数组中前面的元素,其余元素自动定为空字符(即'\0')。

可以用字符串常量来初始化字符数组;

char c[]="I am happy";    #*注意此时数组的长度不是10,而是11,因为系统自动加上了'\0'结束符*#

####  字符数组的输入输出 

-  逐个字符输入输出。用格式符"%c"输入或输出一个字符。

- 字符数组的输出
先来看一段代码的表现

char * a = "aaa";
char b[] = {'a','a','a','\0','a','a','a','\0'};//中间有结束符
char c[] = {'a','a','a','a','a','a'};//无结束符
char d[] = {'a','a','a','a','a','a','\0'};//有结束符

printf(" a = %s \n b = %s\n c = %s\n d = %s\n",a, b,c,d);
结果:

a = aaa
b = aaa
c = aaaaaa\232�
d = aaaaaa

那么可以得出一些结论


1.  将整个字符串一次输入或输出。用"%s"格式符,意思是输出字符串(String)。例如:

char c[]="china";
  printf("%s", c);```

  1. 如果一个字符数组中包含一个以上'\0',则遇第一个'\0'时输出就结束。
  2. 无结束符时,可能会打出奇奇怪怪的东西(取决于内存上的内容,同样遇到\0结束输出), **所以一个受控的字符串应该加入结束符 **

你可能感兴趣的:(字符串和字符的区别"A"与'A')