本文共 1742 字,大约阅读时间需要 5 分钟。
上次有网友说我的const指针那篇博文说的不清晰,那么为了对大家负责,我在次更加深入的说一次呗!
基础的就不讲了,主要是那几个实例分析呗!
首先分享一下我个人的经验吧,其实就是两大原则:
//!原则一:对于const 的处理:我本人的经验理解是一个字“ 拆 ”( 遇到const就拆,然后const后面加隐藏变量p ) //! 原则二:...const p 才是真正的常量指针( 之间没有没有东西 )
1.char* *p1; // 指向 char* 的指针
2.const char* *p2;
//指向 ( const char)类型指针的指针,也就是被指向的那个指针是指向( const char )类型的 ;对于这一个我们可以分步处理:看成是 constchar * p = => X ; X * p2; 也就是说p是指向constchar类型元素的指针,而p2是X的指向X的指针,那么p2就是指向 “ const char 类型指针”的指针!图示:|p2|----->|p|----->|const char| 所以可知*p是不可以 改变的,其他的可以、、、
3.char * const *p3;
// 这一个我们也可以分开看:char *const p ===> X; X * p3, 这一个与上面的区别就是 const char * ===> char * const ,那么其实我们在分析的时候就是需要把隐藏起来的那个中间的指针符号加上去( 也就是 p );那么我们现在分析看看:char * constp:即p是 指向char的指针,但是有const修饰,所以他是常量指针,所以只能指向只一块内存,但是里面的值是可以变得呗!O(∩_∩)O~;再看X*p3;即p3是指向X的指针:所以综上:p3是指向一个指针(即p),那么这个中间指针p是指向char的,而且p是常量指针,所以p3是指向指向char类型的常量指针的指针;分析之后还是很清晰的是吧!O(∩_∩)O~
4.const char *const *p4;
// 同样再拆这一题:const char *const p ===> X ; X *p4;可以看到前面的是常量指针指向常量( 呵呵,大家都是常量唉) X *p4就是p4指向X的指针,所以就是p4指向指向常量的常量指针的指针; if对于为什么这么拆分不理解,那么我们可 以按照原则来:就是遇到const就拆:所以拆为:constchar * p; ===> X; X const *p4;其实理解起来是一样的,前面是p是:指向char常量的指针,后面的是 X const *p4与 constX *p4是一样的呗~,那么也就是说p4是指向X常量的指针,综 合就是p4是指向指向char常量的常量指针的指针
5.char ** constp5;
//首先我们知道p5是常量指针,那么这一题就easy了,不就是:p5是指向 char* 的常量指针么!O(∩_∩)O~
6. const char ** constp6;
// 还是拆是吧!const char ** p;=====> X; X const p6;前面就是p是指向“常量char*” 的指针,后面的是p6本身是常量指 针;指向X;总上就是:p6是指向constchar * 类型指针的常量指针
7. char * const * constp7;
// 还是拆哦!char * const p;===> X ; X * const p7; 前面就是:p是指向char 的常量指针;后面是p7是指向X的常量指针
8. const char * const * const p8;
//接着拆:const char * constp;====> X; X * constp8;前面就是p本身是常量指针,指向的是constchar类型;后面 是p8本身是常量指针,指向X;所以综上所述:p8 是指向指向constchar类型常量指针的常量指针 ; 综合就是:p7是指向char类型常量指针的常量指针
综上:总之一个字:拆!该拆就拆,但不是想拆就拆!不要学拆迁办的那一群BS(reverse) !!!
转载地址:http://loaci.baihongyu.com/