指针PPT(让你不再害怕指针)概要
- 格式:ppt
- 大小:2.22 MB
- 文档页数:16
第五章3指针(11--33)⼗⼀指针的运算1、作为⼀种特殊的变量,指针可以进⾏⼀些运算,但并⾮所有的运算都是合法的,指针的运算主要局限在加减算术和其他⼀些为数不多的特殊运算。
2、把a的值5作为地址 0x00000005赋值给*p是发⽣访问冲突。
整数与指针最好不要直接运算。
3、地址的赋值和指针的赋值。
num,p1,p2 他们中⼀个改变,其他的两个都会跟着改变4、 a被编译器解析为数组的⾸地址通过下标循环进⾏遍历通过指针循环进⾏遍历5、通过dll注⼊的⽅式修改另⼀个进程的数据通过定义并初始化⼆级指针p,使其改变另⼀个程序的指针p的指向,从⽽改变它的值。
外挂⼯具:cheat engine注意不会实时刷新⼗⼆指针的算数运算1、使⽤递增/递减运算符(++ 和 --)将指针递增或递减指针++就是按照指针类型的⼤⼩,前进⼀个类型的⼤⼩,int,前进四个字节指针 ++ 和 -- 只有在数组的内部才有意义。
2、指针++ 就是指针每次向前移动sizeof(指针类型)个字节通过指针循环的⽅式初始化数组a的每⼀个元素(从头到尾扫描数组)(注:格式控制符“%p”中的p是pointer(指针)的缩写。
指针的值是语⾔实现(编译程序)相关的,但⼏乎所有实现中,指针的值都是⼀个表⽰地址空间中某个存储器单元的整数。
printf函数族中对于%p⼀般以⼗六进制整数⽅式输出指针的值,附加前缀0x。
)3、指针加上2,在数组内部等价于向后移动两个元素的⼤⼩指针减去3,等价于数组内部,向前移动3个元素的⼤⼩此时此刻,就会打印出 3 5 24、指针的加减法在⾮数组内部没有任何意义,⽽且很容易越界报错⼀个exe不能读写其他exe进程的内存。
⼗三指针之间的⽐较1、对两个毫⽆关联的指针⽐较⼤⼩是没有意义的,因为指针只代表了“位置”这么⼀个信息,但是,如果两个指针所指向的元素位于同⼀个数组(或同⼀块动态申请的内存中),指针的⼤⼩⽐较反映了元素在数组中的先后关系。
指针的概念指针是C++所提供的一种颇具特色的数据类型,允许获取和直接操纵数据地址,实现动态存储分配。
掌握指针的应用,可以使程序简洁、紧凑、高效,并且能更有效地使用宝贵的内存空间。
指针是C和C++的精华所在,也是C和C++的一个十分重要的概念。
主要内容:指针的概念;指针数据对象的定义;指针运算;指针数据对象的引用;利用指针实现动态存储分配(动态数组)。
重点:指针的概念、动态存储分配。
一、指针的概念1.什么叫指针一个数据对象的内存地址称为该数据对象的指针。
指针可以表示简单变量、数组、数组元素、结构体甚至函数。
也即指针具有不同的类型,可以指向不同的数据存储体。
例如:int *point1,a,b;double *point2[20];……point1=&a;point1 整型变量apoint2[0] 双精度形数组Point1 = &b;Point1 整型变量b图6.1 指针示意注意:指针中的内容是可以动态改变的,例如point1既可以指向变量a也可以指向变量b。
2.指针的作用1)能实现复杂的数据结构,例如数组、链表、队列和堆栈等;2)能方便地表示和处理字符串;3)能方便地实现动态存储分配;如果一个程序或者一个函数出现使用需要大存储量的数据对象,采用动态存储分配可以提高内存的使用率,也即这些数据一般用预先定义的指针变量来表示,当实际使用时才临时申请实际的存储空间,使用完毕立即释放。
指针变量所占的内存空间与所表示的数据对象的存储空间相比实在是微乎其微,因为它只是用来存放对应空间的首地址。
4)在函数之间进行数据的双向传递。
将形参定义成指针类型,对应的实参必须是某个数据对象的首地址,也即采用传地址的方式,这样就可以实现数据的双向传递。
3.指针类型指针类型属于标准类型,其取值是所表示的数据对象的内存地址,所以其值域是内存地址集。
指针类型用来定义各种类型的指针变量,其语法如下:<类型标识符> *例如 int *表示整型指针类型,char *表示字符指针类型,等等。