cdo

导航

2005年9月27日 #

第十章 围绕p()与(*p)()的争论- -

摘要: 对于一个函数:void func(void); 我们通常可以定义一个这样的函数指针指向它:void (*p)(void) = func; 通过p调用func时,通常有两种写法: p();或者(*p)(); 围绕这两种写法,当初C89制定的时候曾经有过争论。(*p)();是一种旧式的规定,旧式规定圆括号左边必须具有“函数”类型,如果是指向函数的指针,那么必须加上*声明符。但C89不再... 阅读全文

posted @ 2005-09-27 21:28 Cdo 阅读(310) 评论(0) 推荐(0) 编辑

第九章 指针与const- -

摘要: const一词是英文constant的缩写,设立这个关键字的本意,是希望让它所修饰的对象成为一个常量。记得在国家间的外交中,有一个经常用到的术语:“从事与身份不符的活动”,这个const恰恰也正从事着这样的活动,呵呵。C语言可以有三种方法定义一个常量:#define、const和枚举,但只有枚举才是真正的常量,什么是真正的常量?真正的常量是没有存储空间的,是一个右值,这意味着通过任... 阅读全文

posted @ 2005-09-27 21:28 Cdo 阅读(382) 评论(0) 推荐(0) 编辑

第八章 右左法则----复杂指针解析- -

摘要: 上一章费那么多唇舌讨论C语言的声明,其实目的都是为了这一章,期望读者通过对C语言声明形式的详细了解,树立声明嵌套的观念,因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何... 阅读全文

posted @ 2005-09-27 21:27 Cdo 阅读(344) 评论(0) 推荐(0) 编辑

第七章 C语言声明详解- -

摘要: 人们常说,C语言的声明太复杂了,的确,这也是C语言饱受批评的地方之一。不过,笔者认为,真正要受到批评的不是语言本身,而是那些传播者。传播者们通常都有一个共识:讲述要由浅入深。作为原则,笔者并非要反对它,毕竟笔者对C语言的学习,也经历了相同的过程。但是,由浅入深并不意味着一切从简,以偏盖全。计算机语言不同于数学理论(虽然它的确根植于数学,与数学密不可分),数学理论是一种循序渐进的过程... 阅读全文

posted @ 2005-09-27 21:24 Cdo 阅读(620) 评论(0) 推荐(0) 编辑

第六章 “另类”数组- -

摘要: 动态数组与字符串常量可算是两种“另类”数组。 VLA可变长数组并不为C89所支持,C99才开始支持VLA。但如果想在只支持C89的编译环境中使用VLA的话,怎么办呢?我们可以用动态数组来“模拟”,动态数组在矩阵的运算中很常见,常用来向函数传递一个大小可变的矩阵。动态数组的原理,是利用一块或多块动态分配的内存存储各维的首地址,这样就可以p[i][j]的形式访问数组的数... 阅读全文

posted @ 2005-09-27 21:17 Cdo 阅读(346) 评论(0) 推荐(0) 编辑

第五章 指向数组的指针- -

摘要: 讲到第五章了,数组两个字还离不开我们的左右,数组的内容也真多,另一方面也因为数组与指针的关系的确非常密切。 通常,对于int a[8][9]这个二维数组,我们可以这样定义一个指向它的指针: int (*p)[9]; 这个声明的形式跟人们所熟悉的int *p的形式大相庭径,初学者通常会感到迷惑,不理解的地方大致有四个: 1。为什么会以这种形式声明? 2。(*p)应该... 阅读全文

posted @ 2005-09-27 20:42 Cdo 阅读(641) 评论(0) 推荐(0) 编辑

第四章 [ ]运算符的本质- -

摘要: 数组是存在于人们头脑中的一个逻辑概念,而编译器其实并不知道有数组这个东西,它所知道的,只是[]运算符,当遇到[]运算符的时候,编译器只是简单地把它转换为类似*(*(a+i)+j)这样的等价表达式,之所以是这种表达式,如前几章所述,是因为C语言的数组实现本质上是数组的嵌套。 由于这种等价关系的存在,会产生一些古零精怪的表达式,例如: 10[a] 这个表达式初看上去让人... 阅读全文

posted @ 2005-09-27 20:41 Cdo 阅读(279) 评论(0) 推荐(0) 编辑

第三章 数组的解剖学- -

摘要: 这一章我们来讨论一下数组的内涵,对数组的内部构造进行一次解剖,看看里面究竟隐藏了什么秘密。 有了前面两章对数组名和C语言数组本质的澄清,再来理解这一章的内容,就容易多了。 在下面的叙述中,笔者会用到一个运算符sizeof,由于在不同的编译器和编译模式下,对一个地址进行sizeof运算的结果有可能是不同的,为了方便讨论,我都假设地址长度为4个字节。 多... 阅读全文

posted @ 2005-09-27 20:40 Cdo 阅读(287) 评论(0) 推荐(0) 编辑

第二章 再一次吃惊!----数组的数组与多维数组的区别

摘要: 看见这个题目,也许有些人就会嘀咕了:难道两者不是一样的吗?C语言的多维数组不就是数组的数组吗?不!两者是有区别的,而且还不小呢。首先看看两者的共同点: 1。内存映象一样。 2。数组引用方式一样,都是“数组名[下标][下标]........”。 3。数组名都是数组的首地址,都是一个符号地址常量、一个右值。 由于两者的共同点主要反映在外部表现形式上,因此,从外部看来,数组... 阅读全文

posted @ 2005-09-27 20:40 Cdo 阅读(321) 评论(0) 推荐(1) 编辑

第一章 什么是数组名?

摘要: Tag: 指针 数组 数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字:“一维数组是一级指针”“二维数组是二级指针”“数组名可以作为指针使用”“数组名就是..........的常量指针”“数组名就是..........的指针... 阅读全文

posted @ 2005-09-27 20:38 Cdo 阅读(1061) 评论(1) 推荐(0) 编辑