数值在计算机中是以二进制的形式存储的。
字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,UTF8)。
例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。
C中字符表示用单引号,字符串表示用双引号,字符串是一段连续的字符。
一、字符
字符之间的相减就是ASCII码之间的相减
字符整数在内存中的存储
在内存中只是存储了2和5的ASCII码的值
打印出a和b的值查表得知是2和5的ASCII码的值
为什么呢??
二、字符串
C语言中没有表示字符串类型的数据结构,但是C++用string表示字符串的数据类型。
想要表示字符串用指针或数组。
char *q="abcd";
char a[] = "hello";
这种定义是错误的,char类型只能表示字符。
指针表示字符串
p和q都是一个指针(在x86编译下一个指针4字节),指向了字符串的首地址
不管p,q字符串里有多个字符,指针p,q的大小依旧是4字节
字符串在内存的存储
上图的p-q只是两个指针里面存放的地址数之间的相减(即串abc的地址与串abcd的地址之间相差多少)
abcd存储时为什么是61 62 63 64(16进制显示)
存进去字符串abcd,刚好对应16进制的abcd
数组表示字符串
但还是计入串长,在数据结构中是不计入串长的