最近主要忙于对各种内部排序算法的总结,所以这个系列的文章很久没有写到了.但指针的作用在c++中是不可替代的.最近看了一些公司的笔试题目,不断有关于指针的内容出现,可见大部分公司对于程序设计的基础知识是十分看重的.
这次的文章我们将主要探讨关于指针以及关键字const的搭配用法.相信很多读者在最开始学习指针的时候,都会被诸如指针常量, 常量指针, 指向常量的常量指针等等概念搞的云里雾里.这一次我们就将试图通过对一个典型问题的探讨将这一系列的概念弄明白.
下面先给出本人最近看到的问题的链接,有兴趣的朋友可以进去看看~
http://topic.youkuaiyun.com/u/20080821/17/3D73A9AE-261F-4526-A1C1-A1ECDB759F2F.html
这个题目的要求是对给出的四个表达式进行分析,下面是原题 :
const char *const * keywords
const char const * keywords
const char *const keywords
const char const keywords
请问以上四种定义,所得出的变量有什么区别,各代表什么?(请从维数、用途等方面简要说明)
回帖的各位大牛都给出了自己的理解 , 本人比较倾向的是 e_sharp 的处理方法 ,简单又明了.这里就给出本人的一些思路和想法 ,希望能帮助各位理解 .
由简到难,先从第四个式子开始. const char const keywords ,这个很简单 ,表达的含义和 const char keywords 是一样的 . 都表示的是一个 char 类型的常量 , 不可改变 keywords 的值.
然后是第三个式子. const char *const keywords ,一般遇到这种比较复杂的表达式 , 我们都可以先对式子进行初步的划分 , 然后再观察式子的含义 . 这里我们可以根据符号 * 来进行关联 . 划分之后的表达式就变成了非常容易看懂的形式 : (const char ) * const keywords , 到这里我们可以很容易的看出原来的表达式表示的就是一个指针常量(不可以改变指针的指向),指向的对象是一个 char 类型的常量(对象内容也不可以改变).绕口的说, 就是一个指向常量的指针常量.
再就是第二个式子啦. const char const * keywords , 这个式子比较简单. 对表达式同样采用和上面类似的划分方法, 将表达式转化为易于观察的形式 : (const char const )* keywords , 明显的, 这个式子又是是等同于 (const char )* keywords 的 , 所以第二个式子所表示的是一个 常量指针,指向的对象是char类型的常量,即 不可改变指向对象的值(当然可以改变指针的指向).
第一个就比较复杂了. const char *const * keywords , 还是首先的进行类似的划分 , 简单处理后, 可以将原表达式转变成比较好看一点的形式 : ((const char )* const) * keywords , 当然,这样还是不能够直接看出表达式含义. 不过可以看出表示中有两个嵌套的指针, 也就是一个二级指针. 通俗的说, 就是一个所指对象还是指针的指针 . 继续分析, 从右到左的看, 这个指针是指向 (const char )* 类型对象的常指针(不可以改变指向的对象的内容) , 而 (const char )* , 也就是本题的第二个式子, 这里不再重复说明了 . 总之, 原表达式所表示的是一个指向 (const char )* 类型的二级指针.
好吧, 文章看起来可能会有些混乱,不过对于四个表达式的理解还是很全面的. 当然不排除在码字过程中出现的一些错误~~希望各位发现的能够不吝指正吧. 还是希望对各位朋友能有所帮助,大家共同进步. .
下次的更新应该会继续对内部排序进行探讨,~敬请期待~~