megaboy
码龄24年
求更新 关注
提问 私信
  • 博客:138,838
    社区:9,003
    147,841
    总访问量
  • 17
    原创
  • 129
    粉丝
  • 1
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖北省
加入CSDN时间: 2002-06-19
查看详细资料
个人成就
  • 获得30次点赞
  • 内容获得221次评论
  • 获得80次收藏
  • 博客总排名755,876名
创作历程
  • 17篇
    2005年
成就勋章
TA的专栏
  • C语言技巧集锦
    4篇
  • 再再论指针
    12篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 0

创作活动更多

芯创视界・嵌入式视频创作征集大赛

嵌入式工程的价值,藏在每一次硬件调试、代码迭代与项目落地之中。 让我们因热爱相聚,用镜头与一众开发者互通心得、彼此启发,记录下探索的每一步,分享思路与经验。 让更多人看见嵌入式开发的魅力,也让每一次创作成为推动技术传播与社区成长的力量。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0d445ffce72b42f997aaf1b030a652aa.png#pic_center)

24人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

不定长字符串输入处理小技巧

        大家在编程的过程中,经常会遇到需要输入一个不定长字符串的情况。通常来说,解决这个问题可以有两种方法:        一是先分配一个固定长度的缓冲区,把输入的字符串先存储到这个缓冲区,然后再根据其长度动态分配内存。这个方法缺点是无论分配多大的缓冲区,都无法完全满足要求。太大浪费内存,太小会发生字符串截断。        二是逐个字符输入,然后通过realloc函数来实时改变缓冲区的大
原创
博文更新于 2006.01.07 ·
4702 阅读 ·
1 点赞 ·
5 评论 ·
5 收藏

ASCII码0x1A使文件意外结束的处理方法

        在windows操作系统中,大家在编写带有文件操作的程序时,有时候会遇到一种奇怪的现象,在对一个文件以文本方式进行读取的过程中,读到中途还没到文件末尾时feof()函数就意外地为真,这让人很惊讶,一时难以找到原因,实际上,这是ASCII码0x1A在作怪。运行下面程序:int main(void){        int i;        unsigned char c;     
原创
博文更新于 2005.11.20 ·
7804 阅读 ·
0 点赞 ·
9 评论 ·
4 收藏

如何高效产生m个n范围内的不重复随机数(m<=n)

        如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机数比较,如果重复,就重新产生。这是个很笨的方法,且比较次数呈线性增长,越往后次数越多。其实这些比较是多余的,完全可以不进行比较,只要反过来,按顺序产生这些数,但随机产生它们的位置。例如下面产生100个100以内不重复随机数的代码:int a[100];for(i=0; ifor(i=99; i
原创
博文更新于 2005.11.08 ·
8574 阅读 ·
1 点赞 ·
17 评论 ·
6 收藏

《再再论指针》后记

        在这篇后记中,笔者将对三个问题进行补充:一、关于数组名取地址的问题。c89、c99允许对数组名取地址,是由于数组符合一个对象的定义,按照一        个对象的语义,对其取地址是合理的。但矛盾在于,数组名是一个符号地址,是一个右值,对其取地址不        符合&运算符的语法。c89、c99委员会经过权衡,认为维护一个对象的合理性比一个运算符更重要、更合        理,因此
原创
博文更新于 2005.11.08 ·
5433 阅读 ·
0 点赞 ·
4 评论 ·
8 收藏

标准输入输出函数%[]和%n说明符的使用方法

        标准输入输出函数scanf具有相对较多的转换说明符,它常常作为入门级函数出现在各种教材中。但奇怪的是,[]和n这两种都为c89/c99所规定的标准说明符却鲜少在大多数教材中出现。虽然[]和n说明符的使用频率不及其它说明符,但两者在程序设计中的作用仍然不可小视,尤其是[]说明符。        众所周之,scanf以空白字符为定界符,但如果输入的字符串是以其它字符为定界符的,那怎么办
原创
博文更新于 2005.10.23 ·
6140 阅读 ·
0 点赞 ·
1 评论 ·
11 收藏

单双精度浮点数的IEEE标准格式

        目前大多数高级语言(包括C)都按照IEEE-754标准来规定浮点数的存储格式,IEEE754规定,单精度浮点数用4字节存储,双精度浮点数用8字节存储,分为三个部分:符号位、阶和尾数。阶即指数,尾数即有效小数位数。单精度格式阶占8位,尾数占24位,符号位1位,双精度则为11为阶,53位尾数和1位符号位,如下图所示:单精度浮点数存储格式 s指数  尾数                 
原创
博文更新于 2005.10.23 ·
4223 阅读 ·
0 点赞 ·
1 评论 ·
1 收藏

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

        指针是C语言规范里面一项核心内容,指针具有与生俱来的优势,利用指针可以写出许多短小精悍、效率极高的代码,它是C语言一把无可替代的利器,凭着这把利器,C语言与其它高级语言相比至少在效率方面高人一筹。但是,由于指针的原理与使用方式跟人们通常的思维习惯有较大的差别,造成了指针比C语言其它概念难理解得多,这使得对指针认识不足成为了一种在C程序员中普遍存在的现象,这种不足必然导致程序员在指针
原创
博文更新于 2005.10.17 ·
9353 阅读 ·
3 点赞 ·
4 评论 ·
48 收藏

第三章 数组的解剖学

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

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

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

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

        数组是指针的基础,多数人就是从数组的学习开始指针的旅程的。下面我节选一些在各种论坛和文章里经常见到的关于数组的文字:“一维数组是一级指针”“二维数组是二级指针”“数组名可以作为指针使用”“数组名就是..........的常量指针”“数组名就是..........的指针常量”..................................这些文字看起来非常熟悉吧?类似的文字还有许
原创
博文更新于 2005.09.17 ·
17619 阅读 ·
13 点赞 ·
107 评论 ·
88 收藏

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

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

第五章 指向数组的指针

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

第四章 [ ]运算符的本质

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

第六章 “另类”数组

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

第七章 C语言声明详解

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

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

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

第九章 指针与const

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