自问自答1基础数据类型的本质与特点?指针与数组的关系?char * 与char []的区别?16进制的意义?

Posted contradictory-man

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自问自答1基础数据类型的本质与特点?指针与数组的关系?char * 与char []的区别?16进制的意义?相关的知识,希望对你有一定的参考价值。

位与字节

在计算机中,一个二进制的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()意义完全不一样

为了区分字符串的界限,通常会在字符数组末尾增加结束符‘’来作为字符串的结尾,这也是为什么sizeof()得到的长度总是多一位。(‘‘ 是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进制的意义?的主要内容,如果未能解决你的问题,请参考以下文章

C++自问自答

自问自答系列-caffe源码学习之总体学习

redis的自问自答

七日阅书1 计算思维和Java特性《Java程序设计与计算思维》

libgdx自问自答

自问自答 学习系列:从图像分类,到损失函数,到神经网络