You are on page 1of 3

char(字符型)

严格来说,char 其实也是整数类型(integer type),因为 char 类型储存的实际


上是整数,而不是字符。
计算机使用特定的整数编码来表示特定的字符。ASCII 码表

char 称为字符类型,只能用 单引号' '来包围,不能用双引号" "包围。而字符串只能用 双


引号" "包围,不能用单引号' '包围。
输出字符使用 %c,输出字符串使用 %s
int 变量在内存中存储的是整数本身,当以 %c 输出时,也会根据 ASCII 码表转换成对应
的字符。
字符串
C 语言中没有字符串类型,只能使用间接的方法来表示。可以借助下面的形式将字符串赋
值给变量:

char *variableName = "string";


char 和*是固定的形式,variableNmae 为变量名称,"string" 是要赋值的字符串。

由于 C 语言中没有真正的字符串类型,可以通过字符数组表示字符串,因为它的元素地址
是连续的,这就足够了。

举例:

char *s ;

s = "China";

为什么可以把一个字符串赋给一个指针变量。。

这不是类型不一致吗???

C 语言中编译器会给字符串常量分配地址,如果 "China", 存储在内存中的 0x3000


0x3001 0x3002 0x3003 0x3004 0x3005 .

s = "China" ,意识是什么,对了,地址。

其实真正的意义是 s ="China" = 0x3000;

看清楚了吧 ,你把 China 看作是字符串,但是编译器把它看作是地址 0x3000,即字


符串常量的本质表现是代表它的第一个字符的地址。。。。。。。。。。
s = 0x3000
这样写似乎更符合直观的意思。。。

C 语言中操作字符串是通过它在内存中的存储
单元的首地址进行的,这是字符串的终极本
质。。。

可以看到 s = 0x00422020 ,这也是"China"的首地址

所以,printf("%s",0x00422020);也是等效的。。

字符数组:

char str[10] = "hello";

前面已经说了,str = &str[0] , 也等于 "hello"的首地址。。

所以 printf("%s",str); 本质也是 printf("%s", 地址");

char *s;

char a[ ] ;

前面说到 a 代表字符串的首地址,而 s 这个指针也保存字符串的地址(其实首地址),


即第一个字符的地址,这个地址单元中的数据是一个字符,

这也与 s 所指向的 char 一致。


因此可以 s = a;

但是不能 a = s;

C 语言中数组名可以复制给指针表示地址, 但是却不能赋给给数组名, 它是一个常量


类型,所以不能修改。。

字符指针可以用 间接操作符 *取其内容,也可以用数组的下标形

式 [ ],数组名也可以用 *操作,因为它本身表示一个地址 。。

You might also like