※ 引述《Uniqueness (noman)》之铭言:
: 指标,c语言系列的门神
: 所有入门的人几乎都会在指标卡住
: 余下就是看自身资质看可以多久突破这个门神
: 但纵观所有程式语言,只有c语言有指标的概念
: 所以我说,不会指标应该也没什么关系吧?
使用指标是程式设计真正入流的分野,不会指标就等于不会资料结构,
不会资料结构就等于还算是外行不入流的程式设计。
许多简洁精要的程式设计不只用到指标,更会用到指标的指标的......的指标。
即使是组合语言也是要用到指标才能写好程式结构,像这句组合语言命令─
call word ptr [di]
就是使用 di 内容为指标去呼叫对应位址的函式。
就算是写C++,也是需要用到指标才能写出高段精简的程式,
下面这段以前写给大学部学生操的模拟器多工作业核心,C++原始码就用到两层指标。
能看懂下面C++程式码的人,对于使用指标应该就没太大问题了!
※※※ HPP file
class Activity
{
private:
static Activity *activity, **job_exec, *job[Priority_Total];
Activity *last, *next;
public:
Activity(int);
~Activity();
static void initialize();
virtual void act()=0;
static void action();
};
※※※ CPP file
//======================================================================
// class Activity
//======================================================================
Activity* Activity::activity=0;
Activity** Activity::job_exec=0;
Activity* Activity::job[Priority_Total];
Activity::Activity(int priority)
{
last=0;
if (next=job[priority]) job[priority]->last=this;
job[priority]=this;
}
Activity::~Activity()
{
if (next) next->last=last;
if (last) last->next=next;
else
{ for (int i=0; i<Priority_Total; i++) if (job[i]==this) break;
if (i==Priority_Total) incident.error(Mr_ActLost); else job[i]=next;
};
}
void Activity::initialize()
{
for (int i=0; i<Priority_Total; i++) Activity::job[i]=0;
}
void Activity::action()
{
for ( job_exec=job; job_exec<job+Priority_Total; job_exec++)
for ( activity=*job_exec; activity; activity=activity->next)
activity->act();
}