关于作者

姓名:

性别:男

出生日期:1981-04-01

地区:广东-广州

联系电话:

QQ:46973511婚否:未婚
用户名:megaboy
笔名:megaboy
地区: 广东-广州
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:11
评论个数:35
留言条数:1




Powered by BlogDriver 2.1

飞天御剑流

 

........剑心,已不再是过去那个传奇中的杀人拔刀斋。手中的逆忍刀,也不再是一把剥夺敌人生存权利的武器,而是活人剑,能活人之剑........

文章

再再论指针----篇首语

        指针是C语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是C语言一把无可替代的利器,凭着这把利器,C语言与其它高级语言相比至少在效率方面高人一筹。但是,由于指针的原理与使用方式跟人们通常的思维习惯有较大的差别,造成了指针比C语言其它概念难理解得多,这使得对指针认识不足成为了一种在C程序员中普遍存在的现象,这种不足必然导致程序员在指针的使用过程中不断遭受挫折,挫折多了,指针俨然变成一道无法逾越的难关,恐惧感也就油然而生了。在恐惧感面前,某些程序员甚至产生了要避免使用指针的念头,这是非常不可取的。指针是如此犀利,正是它才使得C语言威猛无比,如果就这样把它放弃了,那么C语言就算是白学了。我们应当让指针成为你手中那把砍掉索伦手指上魔戒的举世无双的纳西尔圣剑,而不是成为你心中永远的魔戒。

        本文的目的,是希望通过跟各位朋友一起讨论关于指针的几个关键概念及常见问题,以加深对指针的理解。因此,本文并不是讲述形如int *p、struct {int i;float j;} *p等这些东西是什么的文章,阅读本文的朋友最好对指针已经具有一定的使用经验,正因如此,笔者才给文章起名叫《再再论指针》。笔者不敢奢望能够完全解开你心中的魔结,但如果通过阅读本文,能够让你在日后的指针使用过程中减少失误,那笔者就心满意足了。本文将讨论如下十个主题,读者最好按主题的顺序一个一个地阅读,当然,如果你只对其中某个或某几个主题感兴趣,只看那几个也未尝不可。

        当你阅读本文后:

        如果你有不同的意见,欢迎你在评论里留下自己的见解,笔者很乐意跟你一起讨论,共同进步。

        如果你觉得我说的全都是废话,那么恭喜你,你的指针已经毕业了。

        如果你有太多不明白的地方,那么我介绍你先找一些关于数组与指针的读物看看,笔者推荐你阅读一本叫《C与指针》的书,看完后再回来继续思考你的问题。

1、什么是数组名?----一个让你吃惊的事实!

2、再一次吃惊!----数组的数组与多维数组的区别

3、数组的解剖学

4、[ ]运算符的本质

5、指向数组的指针

6、“另类”数组

7、C语言声明详解

8、右左法则----复杂指针解析

9、指针与const

10、围绕p()与(*p)()的争论

- 作者: megaboy 2005年09月16日, 星期五 21:38  回复(0) |  引用(0) 加入博采

第一章 什么是数组名?----一个让你吃惊的事实!
摘要:........这就说明了数组名是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量。数组名跟枚举常量类似,都属于符号常量。数组名这个符号,就代表了那块内存的首地址........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:33  回复(11) |  引用(0) 加入博采

第二章 再一次吃惊!----数组的数组与多维数组的区别
摘要:........数组的数组与多维数组的主要区别,就在于数组的数组各维之间的内在关系是一种鲜明的层级关系。上一维把下一维看作下一级数组,也就是数组嵌套。数组引用时需要层层解析,直到最后一维........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:27  回复(8) |  引用(0) 加入博采

第三章 数组的解剖学
摘要:........一个真正数组的数组名,是一个具有数组类型的符号地址常量,它的长度,是整个数组的长度,并非一般地址的长度,如果一个标识符不具备数组类型,那它就不是一个真正的数组........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:23  回复(3) |  引用(0) 加入博采

第四章 [ ]运算符的本质
摘要:........数组是存在于人们头脑中的一个逻辑概念,而编译器其实并不知道有数组这个东西,它所知道的,只是[]运算符,当遇到[]运算符的时候,编译器只是简单地把它转换为类似*(*(a+i)+j)这样的等价表达式........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:16  回复(3) |  引用(0) 加入博采

第五章 指向数组的指针
摘要:........讲到第五章了,数组两个字还离不开我们的左右,数组的内容也真多,另一方面也因为数组与指针的关系的确非常密切........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:12  回复(1) |  引用(0) 加入博采

第六章 “另类”数组
摘要:........动态数组并非真正的数组,它只是对数组的一种模拟。由于具有数组类型的数组名是系统行为,在用户这一级没法做到,因此只能以指针的形式存放首地址,sizeof(p)和sizeof(p[i])结果都是4字节........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 21:06  回复(0) |  引用(0) 加入博采

第七章 C语言声明详解
摘要:........实际上,C的声明的组织形式是以嵌套为基础的,是用嵌套声明组织起来的,并非象上面所述那么死板,存储类说明符一定得放在限定词前面吗?类型说明符一定要紧贴标识符吗?不!C标准从来没有这样说过........ 查看全文
- 作者: megaboy 2005年09月16日, 星期五 20:55  回复(0) |  引用(0) 加入博采

第八章 右左法则----复杂指针解析
摘要:........如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 20:46  回复(0) |  引用(0) 加入博采

第九章 指针与const
摘要:........const实在不应该被命名为const,这会让人们产生误解,它应该命名为readonly或类似的字眼,意即不能通过被const修饰的对象修改它所指向的对象或者它所代表的对象........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 20:27  回复(0) |  引用(0) 加入博采

第十章 围绕p()与(*p)()的争论
摘要:........那么问题就来了,如果p的值是函数地址,那么*号就是声明符,但如果p指向的内容是函数地址,*号就得被看作运算符了。同一种形式会有两种解释,这是一个矛盾........ 查看全文

- 作者: megaboy 2005年09月16日, 星期五 20:21  回复(9) |  引用(0) 加入博采