根据这段时间的学习深深感觉到应该要深入理解内存机制和指针的用法真的很重要,这是第一篇,也是目前对内存和指针的认识的总结。
内存:就好像一个容器,可以装纳数据在里面,这个容器不是一整块的,它是分了很多很多的小格子,即内存中的位,每个格子装一个0或者1,而我们要放到容器中的数据实际上也是要将他分解成很多段再放进去的,就是将数据转换成二进制0和1再放进内存中。
变量:在程序中声明一个变量后,则会根据所声明变量的类型在内存中开辟一个空间给这个变量使用,
各类数据类型的内存使用及取值范围:
BOOL型为int型,一般认为占4个字节,取值TRUE/FALSE/ERROR。
sbyte型为有符号8位整数,占1个字节,取值范围在128~127之间。
bytet型为无符号16位整数,占2个字节,取值范围在0~255之间。
short型为有符号16位整数,占2个字节,取值范围在-32,768~32,767之间。
ushort型为无符号16位整数,占2个字节,取值范围在0~65,535之间。
int型为有符号32位整数,占4个字节,取值范围在-2,147,483,648~2,147,483,647之间。
uint型为无符号32位整数,占4个字节,取值范围在0~4,294,967,295之间。
long型为64位有符号整数,占8个字节,取值范围-9,223,372,036,854,775,808~9,223,372,036,854,775,807之间。
ulong型为64位无符号整数,占8个字节,取值范围在0~18,446,744,073,709,551,615之间。
float型为32位单精度实数,占4个字节,取值范围3.4E+10的负38次方~3.4E+10的38次方之间。
double型为64位实数,占8个字节,取值范围1.7E+10的负308次方~1.7E+10的正308次方。
需要注意的是每个字节占8位。
变量在内存中是无意义的,它只是代表了一些需要随时变化的在内存中的数据,为了方便编写代码,在程序编译前使用变量来代表这些内存空间。
指针:指针也是一个变量,不过这个变量不是用来装数据的,它只是用来存储内存地址,并可以直接访问内存地址修改对应的数据。我们知道每个数据都需要声明一个变量来为它开辟内存空间存储起来,而变量即使那块空间的内存地址,比如声明一个变量a,int a=100;那么我们就可以使用int* p=&a将变量a的内存地址提取出来并把这个地址存储到指针变量p中去。指针变量也是一个变量,它也在内存中开辟一定的空间以供存储内存地址。这个空间很小,因为内存地址就是整数,如0x7fff9575c05f(以0X开头的表示后面的数字以16进制表示),就是一段16进制的数字表示。
内存地址用处很多,比如可以在函数调用中将一个内存地址作为实参传递给形参的指针,在被调用函数中就可以
利用这个指针直接对那一块内存进行调用。
指针的声明:数据类型* 指针变量名;如int* p;
指针的赋值: 左值(写操作):int* p=100;即将100传递到指针p指向的内存空间中去。
右值(读操作):int a; a=*p;即将指针p指向的内存空间中的数据传递给变量a。