Linux 版 (精华区)
发信人: netiscpu (夜☆星光点点☆), 信区: Linux
标 题: ◇ 之三 -- 指标 - 强 强 强
发信站: 紫 丁 香 (Sun Nov 15 21:51:14 1998), 转信
寄信人: guest.bbs@hgluo.hust.edu.cn
标 题: ◇ 之三 -- 指标 - 强 强 强
发信站: 华南理工大学 BBS木棉站
日 期: Thu Feb 20 14:30:30 1997
战 斗 世 家 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 把指标拿掉了!!!!! 也许以後的高阶语言会
越来越 "高阶"!! )
预告:
下篇将介绍一下 "不定参数" 的用法及运用。记得多支持呦!!
< 死角 - 不定参数 >
---------------------------------------------------------------
<<< 本文版权属於作者 >>>
本文章可自由引用,拷贝,传阅,但需保持本文章之完整性,从标题
到最後版权宣告,且不能用来做商业用途!!
若有任何问题,或是错误之处,欢迎来信批评指教!! 谢谢!!
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--
Enjoy Linux!
-----It's FREE!-----
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.549毫秒