标签:十六 char* 适合 遇到 输入 eof 格式 键盘 文字
位与字节
在计算机中,一个二进制的0或1位一位。8位为1个字节,字节是计算机中常用的度量单位。
位:0或1
字节:00000000 (8个位)
在32位系统中,
int 4字节 32位 范围 -2^31~2^31-1
long 4字节 32位 -2^31~2^31-1
short 2字节 16位 范围 -2^15~2^15-1
char
char 2字节
char是为了专门存储字符而设计的,是另外一种整型。
通常需要char存储表示的就是ASCII码字符集,在键盘输入时,键盘打出字符,字符进入内存后以二进制格式存储进去,读取时再从二进制根据ASCII码表转成字符。
事实上ASCII码中的字符用1个字节就可以表示出来。
在进行运算时,char类型的字符也会自动转成整型,参与运算。(如:‘A’ 会转成65参与运算)
关于中文字符存储
常用的字符编码方式有两种Unicode与UTF-8
Unicode使用4个字节表示字符
UTF-8不定长,通常使用2~4个字节表示字符。
字符串
C语言中并没有专门的字符串类型,通常使用Char * 与char [] ,即字符数组来代表字符串。
使用多个字节编码的汉字通常会被char数组截断。汉字在char数组字符串中通常不是完整存在的。
sizeof是获取所占内存数,与Qt中常用的.length() .size()意义完全不一样
为了区分字符串的界限,通常会在字符数组末尾增加结束符‘\0’来作为字符串的结尾,这也是为什么sizeof()得到的长度总是多一位。(‘\0‘ 是8位的00000000)
C++中的基础类型string,是面向对象的串类型,封装了一系列功能函数,比char*功能要强的多。
指针与数组
数组是多个元素的集合,由于数组在内存中存储于相连的内存单元中,所以可以使用数组首地址方便的对数组进行操作。
指针的本质是32位(4bit)的整型。
无论是 int * p, float * p char * p,只是代表地址所在的内存单元的类型为该类型,指针变量本身永远为整型int,因为它保存的是地址值。
C语言中是没有字符串这个类型的,所以使用字符数组来存储字符集合。即 char [] 或 char *。
而C语言中的字符串常量本质上就是一个“地址”。C语言中操作字符串,依靠的也是字符串的首地址。
如在char str[] = “hello” 中 str 为字符串hello 的首地址。
char * 与 char []
char str[] 中 str代表了字符串的首地址,同时str还是数组名,数组名是一个常量,无法被修改赋值。
char * p 中p 的作用也是保存字符串的地址(首地址)。
因此 可以 char str[] = "hello";
char * p = str;
而不能相反。
另外,char str[10] 在申请地址方面是直接申请10个元素的位置
char * p 在申请空间的时候,申请的是用来存储指针的空间,即32位。
十六进制
与适合人类习惯的10进制与完全计算机习惯的二进制不同。
16进制即满足了计算机的使用,又给了人们直观理解计算机语言的方法。
16进制是人与计算机语言的过渡。
所以在日常编码中总是能遇到16进制存储的情况。
但无论是何种存储方式,本质都是01.
学识尚浅,欢迎纠正与补充。
待补完。。。
【自问自答1】基础数据类型的本质与特点?指针与数组的关系?char * 与char []的区别?16进制的意义?
标签:十六 char* 适合 遇到 输入 eof 格式 键盘 文字
原文地址:https://www.cnblogs.com/contradictory-man/p/13159939.html