今天开始了指针的复习,由于之前不管是在学校学的指针还是自己看着书来的都是感觉不太全面,今天也算是跟着复习了一遍吧。今天看了关于迷途指针,32位应用程序,64位应用程序,arm应用程序的编译机制的了解,还有优先级的接触生效,最关键的还有指针,我们一个一个的说。
迷途指针,我感觉这个今天就是学会了一个新名词,之前是知道原理的,我们在free掉指针后,指针内所存储的地址仍然是之前分配的,所以其存储的是一个无效的地址,这时候这个指针就成为迷途指针了。
关于32位和64位的问题,我们再用vs的时候一半没有经过配置的话写出的程序也大都是32位的应用程序,有一个配置管理器,我们可以根据需求来配置,32位和64位就是寻址的能力大大的增加了。
优先级的接触生效,这个举两个例子吧,*p++等价于*(p++),++*p等价于++(*p),前一个的++和p接触而且优先级较高所以就接触生效了,而后者++和*p未接触,所以就没有接触生效的问题了。
关于指针,今天又看了看,但是看的这些和一些编译原理相关了,因为这些细节都是由编译器造成的,比如:
int a[5] = {1,2,3,4,5}我们sizeof(a)这时候结果是20
int *p = a;这时候我们sizeof(p),结果是4
这个就和编译器有关系了,编译器在前者sizeof进行拦截,也就是说给出的值是20
而且数组在传递参数的时候拒绝副本机制,也就是说他默认为了节约内存,就进行了传递指针,其他的普通类型比如int,double,float都是有副本机制的。
return也有副本机制,而且return的值也不能进行取地址操作,因为其值是放在寄存器里的,寄存器不能进行区地址操作。如果懂汇编的朋友可以反汇编看一下,一般都是放在eax寄存器内的
今天就到这了,快12点了,我去刷牙,然后睡觉,明天继续