弘毅自学指针基础

来源:互联网 发布:成都医院招聘网络总监 编辑:程序博客网 时间:2024/05/17 07:19

1.        数据的内部表示法

2.        内存地址

3.        左值和右值

4.        指针变量

5.        指针变量的内容

6.        间接访问操作符

7.        未初始化和非法的指针

8.        NULL指针

9.        Void*类型的指针

10.    指针常量

11.    指针的指针

12.    指针表达式

13.    指针运算


-------------------------------------------------------------------------------------------------------

 

数据的内部表示法

计算机中所有的数值都是按照被称作比特bitbinary digit的缩写)的基本单位的形式存储的。01是计算机所基于的二进制系统所用的两个数字。

为了方便地存储整型和字符型的信息,将若干个独立的比特组成一个较大的单元,作为完整的存储单元。这种最小的组合单位被成为字节(Byte)

ANSI C并没有要求一个字节一定要多长,仅有的规则是char类型数据被定义为占据一个字节,因此,一个字节的长度必须足以容纳一个字符代码。故一个字节一般由8个比特组成

一个字的大小通常要求容纳一个整型数据,整型数据对一般计算机而言都是两个字节或者四个字节组成。

计算机内存容量通常由千字节kilobyte,KB)和兆字节(megabyte,MB)来衡量。由于计算机系统是二进制数据存储,故:

K=210=1024

M=220=1048576

-------------------------------------------------------------------------------------------------------

内存地址

一个变量的值就是分配给这个变量的内存位置所存储的数值。

内存中的每个位置都由一个独一无二的地址标识。

内存中的每个位置都包含一个值。

存储系统中,每个字节都有一个数字的地址。一般,第一个字节在计算机中的地址为0

。。。      101   102      103    104    105      106            107    108  。。。

 

 

 

 

 

 

 

 

 

 

比一个字符大的数值放在内存中连续的字节单元中。

许多机器以字为单位存储整数,每个字一般由2个或者4个字节组成。若一个字由4个字节组成,就需要4个字节的连续内存单元。但它仍然只有一个地址。至于它的地址是它最左边那个字节的位置还是最右边那个字节的位置,不同的机器有不同的规定。另外,有些要求边界对齐的机器上,整型值存储的起始位置只能是某些特定的字节,通常是24的倍数。但边界对齐的方式由硬件决定,不影响编程。以下为整型数据的存储形式:

。。。           102                                             106             

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

左值和右值(L-valueR-value

这两个术语是多年前由编译器设计者所创造并沿用至今。

a =b+2;

a是个左值,因它标识了一个可以存储结果值的位置;

b+2是个右值,因为它指定了一个值。

b+2=a;对不?

a可以做右值,因为每个位置都包含一个值;

b+2不能作为左值,因为它并未标识一个特定的位置,故此赋值语句非法。

字面值常量也都是左值。间接访问和下标引用的结果是个左值。

下标引用实际上是一个操作符,则

Int  a[16];

a[b + 2]=0;

左边实际上是个表达式,但它标识了一个特定的位置,是左值。

int  a, *pi;

...

pi = &a;

*pi =2;

第二条赋值语句,它左边的那个值是个表达式,是个合法左值。

指针pi的值是内存中某分特定位置的地址,*操作符使机器指向那个位置。当它作为左值使用时,这个表达式指定需要进行修改的位置。当它作为右值使用时,它就提取当前存储于这个位置的值。

 

-------------------------------------------------------------------------------------------------------

指针变量

 

指针是一个数据项,它的值是其它值在内存中的地址。

数据结构总是在计算机的内存中,因此必然会有地址。因为内存地址在内部表示为一个整数,所以当数据结构本身很大时,利用指针引用,则节约大量内存空间。

对于左值,左值一旦声明,尽管左值的内容可以改变,但它的地址永远不能改变。

左值的地址本身也是数据,也能在内存进行操作和存储。

声明:

int *p;

变量p为指向整型的指针变量。

基本类型 * 变量名

Int *p1, *p2;

*在语法上属于变量名。

-------------------------------------------------------------------------------------------------------

指针变量的内容

 

原创粉丝点击