作者文章归档:杨宗德

资深Linux开发者,互联网探索者,Linux高级程序设计(第三版)作者,曾任职于东软、华为、NHN等多家通信及互联网企业。曾担任某著名IT企业技术面试官及互联网海量数据相关项目开发Leader。

杨宗德解析C语言中的sizeof()


  杨宗德解析C语言中的sizeof()。

  一、sizeof的概念

  sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。

  二、sizeof的使用方法

  1、用于数据类型

  sizeof使用形式:sizeof(type); 注:数据类型必须用括号括住。如sizeof(int)。

  2、用于变量

  sizeof使用形式:sizeof(var_name)或sizeof var_name

  变...

Read more

杨宗德浅议C语言获得命令行参数的方法


  杨宗德浅议C语言获得命令行参数的方法。每当你运行一个DOS或Windows程序时,都会生成一个程序段前缀(Program SegmentPrefix,简称PSP)。当DOS程序的装入程序把程序复制到RAM中来执行时,它先把256个字节分配给PSP,然后把可执行代码复制到紧接着PSP的内存区域中。PSP中包含了DOS为了执行一个程序所需要的各种各样的信息,其中的一部分数据就是命令行。PSP中偏移量为128的那个字节中存放着命令行中的字符个数,接下来的127个字节中存放着命令行本身。这也正是DOS把你能在其提示行中输入的字符个数限制在127个之内的原因——因为它...

Read more

杨宗德:C语言程序如何判断一个字符是字母或数字


  杨宗德:C语言程序如何判断一个字符是字母或数字。字母表中的所有字母(包括计算机键盘上的所有键)都被赋予了一个值,这些字符及其相应的值一起组成了ASCII字符集,该字符集在北美、欧洲和许多讲英语的国家中得到了广泛的使用。

  字母字符被分成大写和小写两组,并按数字顺序排列。有了这种安排,就能很方便地检查一个字符是否是一个字母以及是大写还是小写。下面这段代码说明了如何检查一个字符是否是一个字母:

  int ch ;

  ch=getche() ;

  if((ch>=97) && (ch<=122))

  printf(" %c is a...

Read more

杨宗德告诉你使用复印的C语言答案的危害


  杨宗德告诉你使用复印的C语言答案的危害。不少学习C语言的同学在复印店购买了C语言程序设计的答案,计算中心强烈建议不要使用,它会给您带来以下危害:

  (1)严重影响您的学习效果。本应动脑筋、加强对相应知识点的理解和灵活运用、借此锻炼自己思维、形成自己能力的作业与习题,由于有了答案,你不再需要动脑筋或动很少脑筋,虽然一时轻松,但却骗了自己、害了自己。

  (2)严重禁锢您的思维、扼杀您的个性、带走您的灵感和创意。同一问题,程序实现可能有多种,没有答案时,您的设计完全有可能是独特而有价值、有创意的,您的理解可能是深刻的,您的算法可能是出色的。有了答案,您不再思考,受答案束缚,没有了自...

Read more

杨宗德以空间换时间进行c语言性能优化


  杨宗德以空间换时间进行c语言性能优化。在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。

  第一招:以空间换时间

  计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:

  方法A:通常的办法

  #define LEN 32

  char string1 [LEN];

  memset (string1,0,LEN);

  strcpy...

Read more

杨宗德详解C语言可移植性


  杨宗德详解C语言可移植性。可移植性并不是指所写的程序不作修改就可以在任何计算机上运行,而是指当条件有变化时,程序无需作很多修改就可运行。

  你不要把“我不会遇到这种情况”这句话说得太早。直到MS—Windows出现之前,许多MS—DOS程序员还不怎么关心可移残晕侍狻H缓螅蝗恢洌堑某绦虿坏貌辉谝桓隹雌鹄床煌牟僮飨低成显诵小5盤ower PC流行起来后,Mac机的程序员不得不去应付一个新的处理器。任何一个在同版本的UNIX下维护过程序的人所了解的可移植性的知识,恐怕都足以写成一本书,更别说写成一章了。

  假设你用基本AL...

Read more

杨宗德教你用随机函数实现动画的技巧


  杨宗德教你用随机函数实现动画的技巧。在一些特殊的C语言动画技术中,可以利用随机函数int random(int num ) 取一个0~num范围内的随机数,经过某种运算后,再利用C 语言的作图语句产生各种大小不同的图形,也能产生很强的移动感。程序dh1.c就是利用随机函数来产生动画应用。该程序运行后,屏幕中间绘出一台微型计算机,微机下方同时显示“computer”的放大字形,在画出微机的小屏幕内,产生各种大小不同、颜色各异的矩形,这些矩形互相覆盖,给人以极强的动画感。

  程序中改变x1、x2、y1、y2的值,能将图形移动屏幕的任何位置,改变x、y的值,...

Read more

杨宗德讲c语言性能优化——使用位操作


  杨宗德讲c语言性能优化——使用位操作。使用位操作。减少除法和取模的运算。在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用"位运算"来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。举例如下:

  方法G

  int I,J;

  I = 257 /8;

  J = 456 % 32;

  方法H

  int I,J;

  I = 257 >>3;

  J = 456 - (456 >> 4 << 4);

...

Read more

杨宗德分享12个git实战建议和技巧


  git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场。本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助。

  1.使用“git diff”来折叠多行

  用git diff经常会出现很多内容,导致很多内容被遮住了,让人很是苦恼,幸运的是这里有个解决方案。

  如果你使用less作为默认的pager,只需要输入-s,就可以保证不会被diff刷屏了。

  或者,你也可以使用git config设置pager来达到同样的效果:

  为当前项目设置pager:

  $...

Read more

杨宗德教你如何理解指向指针的指针


  我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。

  引用文章相关段落如下:

  1

  2

  int i = 5, j = 6, k = 7;

  int *ip1 = &i, *ip2 = &j;

  现在我们可以这么写:

  1

  int **ipp = &ip1;

  那么现在指针 ipp 指向了 ip1,ip1 指向了 i。*ipp 就是 ip1,**ipp 就是 i,或者说是 5。我们可以用我们熟悉的盒子箭头图来描述,像这样:

  如果我们接着这么写:

  1

  *ipp = ip2;

  我们就改变...

Read more