BBS水木清华站∶精华区

 
 
       战   斗   世   家   C 语言讲座                  #3 
 
                                 作者: Lgw Lu 
                                 E-Mail: lgwlu@ms1.hinet.net 
--------------------------------------------------------------- 
 
                   < 指标 - 强 强 强 > 
 
前言: 
 
     C 语言最强的资料型态,说 "指标" 应该不为过!!  也是因为有指标 
  所以 C 才变得很有 "弹性",应用起来也就可以 - 天马行空... 
 
内文: 
 
     相信大家对指标一定已有一基本概念了!! 任何资料型态都可以有 
  指标形式!! 
 
  Ex: 
     char *p; 
     int  *p; 
     union XX *p; 
     struct XX *p; 
     ..... 
 
  在这要说几个比较不同的!! 
 
  (1) void 
 
     这个 KeyWord 若加在函式之前,表示不传回值,加在参数表示,不 
  传入任何参数. 
 
  Ex: 
     void func(void); 
 
     那这个呢?! 
 
     void *P; 
 
     其实这是表示,此指标可以指向任何资料型态,亦即当你不确定会 
  得到啥资料型态时,就可使用。 
 
  Ex: 
 
     int func(void *P)   /* 这样便可传入任何型态资料 */ 
 
     注意!! 不确定时才用,不要滥用,记得 #1 的内容吗?! 
  - < 宣告的重要性 > - 
 
  (2) 函式指标 
 
     这个我想很多人都用过,尤其是写 TSR 或 ISR 的人!! 
 
  Ex: 
     void  __interrupt  __far int8(void); 
 
     但是这里我并不是要说这个,这 ISR、TSR 外头书很多,但函式指 
  标的运用,外头的书,真是少之又少,往下看吧!! 
 
  Ex1: 
     main() 
        { 
        int x; 
 
        scanf("%d",&x); 
 
        switch(x) 
          { 
          case 1: func1(); break; 
          case 2: func2(); break; 
          case 3: func3(); break; 
          ...... 
          ..... 
          case 9: func9(); break; 
          } 
        } 
 
     这种架构相信大家都有用过吧!! 用一 switch 来选择某一功能函 
  式,感觉上好像是一定的!! 
 
     OH!! NO!! 看完这篇後你就会发现原来还有 更 "快",更 "小" 
  的程式写法 - 函式指标。请看修改後的方法。 
 
  Ex2:    /* Ex1 修改 */ 
     main() 
        { 
        int x; 
 
        int (*dpfi[])()= \ 
           { func1,func2,func3 ......func9 }; 
 
        scanf("%d",&x); 
 
        (*dpfi[x-1])();   /* 只需 1 行 */ 
        } 
 
     这就是修改後的程式,看!! 是不是短多了,且速度比用 switch 快 
  !! ( Ex2 程式,应该都了解吧!!) 
 
  (这些□例,都是边打边写,很多欠考虑及坏习惯,自己运用时不要和我 
   一样,如 宣告 default .....,因为这些只是为教学用,SO....看的 
   懂就行啦,不要 " 吐潮 " 我。 :) ) 
 
     指标运用 "无远弗届",当然还有更多运用,以後我会慢慢再讲,像 
  多重指标运用,直接指向 Address 运用.... 
  (因为我打字慢,SO 每次打到 100 多行时,就..... 累了 :< 
   所以我每篇大概都会在 150 行以内。  唉!! 手指欠操 :) ) 
 
     总之,当你觉得 C 已没啥好再学的时候,玩玩指标吧!!  搞不好又 
  让你玩出新花样,到时记得要宣扬宣扬. 
  (指标很好用,结果 JAVA 把指标拿掉了!!!!! 也许以後的高阶语言会 
   越来越 "高阶"!! ) 
 
 
预告: 
     下篇将介绍一下 "不定参数" 的用法及运用。记得多支持呦!! 
  < 死角 - 不定参数 > 
 
--------------------------------------------------------------- 
 
                  <<< 本文版权属於作者 >>> 
     本文章可自由引用,拷贝,传阅,但需保持本文章之完整性,从标题 
  到最後版权宣告,且不能用来做商业用途!! 
 
     若有任何问题,或是错误之处,欢迎来信批评指教!! 谢谢!! 
 
 
 
 

BBS水木清华站∶精华区