指针第一次总结

来源:互联网 发布:linux下测试网速 编辑:程序博客网 时间:2024/06/01 08:12

指针与指针变量
易知常说的指针一般指的是地址,地址是某内存的索引本质只是一个无符号整数,能够寻址,指可以通过地址获得内存的内容,所以指针指向一个函数或一个变量即表示地址代表的内存为一个变量或函数拥有,地址部分可以从计算机基础书籍理解。

指针变量是一种变量,与基本变量int,char等一样,有其固定的内存(说的是大小不变,位置不变即是变量的地址不变),与整型变量不同,整形int 存放整数,指针变量用以存放指针(即地址,也明了指针存在便是为了指向变量的所在,通过获得变量地址便可操作对应变量内容)。

指针变量的内存
易知指针变量地址大小是4字节(指32位机中),注意内存以一字节为一内存单元,以一内存单元为单位进行编位,则4Byte=32bit,可以表示范围为2^32=4GB(内存范围用十六进制可表示:0x0000 0000~0xFFFF FFFF),以便内存中所有地址能被指向,因此指针能指向内存中所有的地址,无超出范围之说(机器不同,指针的内存大小不一样,是为了能全部指向所有内存)。

指针的指向
普通变量(指int,char,float 等),可以被指针指向(通过将地址赋值给指针),当然也可指向指针类型(但知道要将指针定义为与变量相同类型,所以指向指针变量的指针定义时有两颗星星type **ptr,表示双重指针,可以指向指针的地址),以&取地址赋值int *p = &Var,以*对指向的内容间接操作,*p=data; 

一维数组名S(type S[])指向第一个元素地址(S == &S{0]),其是一个常量指针常量(指向常量的指针常量,指其指向不可变,指向的内容不可变 ),亦说明了对数组名赋值是错误的,可以将数组名赋值给对应类型的指针变量,此时,指针指向第一个数组元素,可以*p操作,p++指指针增加一个类型的地址,指向下一个元素。

二维数组名是带两颗星星指针,可以用指向指针的指针变量表示,是一维数组的指针,如type S[2][3],可以看做两个一维数组,S[0][3],S[1][3],S指向S[0],S+1一个指向S[1],可知S[0]此时也为一个地址,S[0]指向S[0][0](S[0] == &S[0][0])S[0]+1指向S[0][1](S[0] +1== &S[0][1]),S[1]指向S[1][0](S[1]== &S[1][0]) ,S[1] +1指向S[1][1](S[1] +1== &S[1][1])...... 因此不能将二维数组名直接赋值给指向一重指针,只能将S[0]或&S[0][0]赋值给带一颗星星的ptr1(type *ptr1),而将S赋值给两颗星星的ptr2(type **ptr2,也可以将普通变量看做(type) (),指针看做(type) *(),(*只为了说明是指针)类型,而指向指针变量的指针变量应为:(type *) *()。

所有的指针变量内存大小都是一样的,结构体的指针也是一样的,并不因其内部定义而改变,例如整型数组指针与整形的指针定义显然是一样的,而不管在结构体内部或外部定义的结构体指针是同一类型,指内存大小一样,所指类型一样,都是指向结构体,也可以将结构体指针看做指向其首地址,结构体指针指向结构体的方法为:将结构体变量地址赋值,struct Str *p = &StruVar;第二种是,申请一段结构体内存,并将其首地址赋值给指针,Struct Str *p = (Struct Str*)malloc(sizeof(Strruct Str)); 此时结构体无名字(指变量名字),惟有指针指向。

当指针指向一个结构体时,可用->引用任何结构体内元素,对其操作。p->StrElement = data;
可以将结构体数组名赋值给结构体指针,p = Str,用法和简单类型数组差不多,此时p指向结构体数组第一个元素,可用p->StrElement代替Str[0].data的操作,p+1代表指针下一个结构体的单位,指向Str[1],而遍历数组常用p++方法,改变p的值,增加一个结构体类型的地址,而至于为什么不用p++遍历链表,原因是链表是非顺序存储结构,p++显然是不合适,只能用指向结构体结构体指针再去调用结构体内的结构体指针寻找下一个节点的位置。

应注意指针的赋值就是一种指向,即指针作为指针变量的内容是一个值,能被赋值,甚至能加减指针,指针的指向内涵是其存储的是另一个变量的地址,之间有联系,并能通过地址(*p)改变指向内存中的内容,所以指针保存地址后就像一条条无形的线能指向任何一段内存,任一个变量,但考虑实际算法时,不要被指来指去的箭头混乱,因为赋值就是指向所指对象只是一个变量或一段内存首地址,而不是一串连续或不连续的内存,这一串指的东西是数组和链表。
原创粉丝点击