指针可以理解为保存地址的数据类型。其数据类型大小在32位系统中为4个字节,在64位系统中为8个字节。
常量指针
int a=10;
const int* p=&a;
const 在int*之前的为常量指针,特点是*p不可变,但p可变。
在图中红色框住的10是不允许通过指针修改的,但还是可以通过a这个途径修改,因为const只限制到了指针上面,并没有办法将内存锁死。
指针常量
int a=10;
int* const p=&10;
const 在int*之后的为指针常量,特点是p不可变,而*p可变.
在图中表现为p已经指向a了,就无法只想b了。
综合体
剩下的一个就是两者的综合体了,什么都没法改变。
int a=10;
const int* const p = &10;
什么都无法改变。
const和指针总结
常量和指针的关系可以从形式上来看,const为常量的意思,*为指针的意思,const int*就为常量指针,int* const就为指针常量。常量指针,不变的是值,指针常量不变的是指针。
const、指针、和结构体的综合运用
在函数中进行结构体的值传递时会产生副本,副本的大小和结构体的大小相关,为了节省空间,可以采用指针传递的方式,但指针方式会导致函数中修改内存的之导致结构体中的信息被改变,这时可以在形参中规定传递的指针是常量指针,这样就保证了在函数中只要出现成员被修改的情况就会报错。