关于利用结构体数组来调用函数从而实现程序分支的有关问题
关于利用结构体数组来调用函数从而实现程序分支的问题
int Nkey,a=5,b=2;
/*-----------------------------------------------*/
void menu_8(int Nkey)
{
a=b*Nkey;
}
void menu_9(int Nkey)
{
a=a-Nkey;
}
void menu_10(int Nkey)
{
a=a+Nkey;
}
/*-----------------------------------------------*/
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10};
main()
{int i;
for(i=0;i <=2;i++)
{ switch(i)
{case 0 : (*ViewFunTab[i].pViewMenu)(1);
break;
case 1 : (*ViewFunTab[i].pViewMenu)(2);
break;
case 2 : (*ViewFunTab[i].pViewMenu)(3);
break;
default: break;
}
}
}
在这个程序中,当i=0时调用menu_8函数,i=1调用menu_9数,i=2调用menu_10函数,
而在结构体数组中为ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10},表面看起来
是定义了6个结构体元素,而0/1/2却实际代表了调用menu_8/menu_9/menu_10时的标号,
怎么理解呢?
------解决方案--------------------
ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10}
只定义了三个数组元素,一个元素有两个字段
ViewFunTab[0].VierId =0;
ViewFunTab[0].pViewMenu=menu_8;
以此类推
------解决方案--------------------
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10};
与
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={{0,menu_8},{1,menu_9},{2,menu_10}};
是一样的
------解决方案--------------------
表面看起来
是定义了6个结构体元素,而0/1/2却实际代表了调用menu_8/menu_9/menu_10时的标号,
怎么理解呢?
=======
表面看起来就是定义了 3 个元素:
ViewFunTab[]={ {0,menu_8},{1,menu_9},{2,menu_10} };
这样是不是明了一些?
ViewFunTab 数组有三个元素,
每个元素由一个 ID和一个fun入口 构成,
根据 ID 读取对应的 fun入口进行函数调用, 很好理解么 ...
int Nkey,a=5,b=2;
/*-----------------------------------------------*/
void menu_8(int Nkey)
{
a=b*Nkey;
}
void menu_9(int Nkey)
{
a=a-Nkey;
}
void menu_10(int Nkey)
{
a=a+Nkey;
}
/*-----------------------------------------------*/
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10};
main()
{int i;
for(i=0;i <=2;i++)
{ switch(i)
{case 0 : (*ViewFunTab[i].pViewMenu)(1);
break;
case 1 : (*ViewFunTab[i].pViewMenu)(2);
break;
case 2 : (*ViewFunTab[i].pViewMenu)(3);
break;
default: break;
}
}
}
在这个程序中,当i=0时调用menu_8函数,i=1调用menu_9数,i=2调用menu_10函数,
而在结构体数组中为ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10},表面看起来
是定义了6个结构体元素,而0/1/2却实际代表了调用menu_8/menu_9/menu_10时的标号,
怎么理解呢?
------解决方案--------------------
ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10}
只定义了三个数组元素,一个元素有两个字段
ViewFunTab[0].VierId =0;
ViewFunTab[0].pViewMenu=menu_8;
以此类推
------解决方案--------------------
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={0,menu_8,1,menu_9,2,menu_10};
与
struct view_menu_table
{ int ViewID;
void (*pViewMenu)(int Mkey);
}ViewFunTab[]={{0,menu_8},{1,menu_9},{2,menu_10}};
是一样的
------解决方案--------------------
表面看起来
是定义了6个结构体元素,而0/1/2却实际代表了调用menu_8/menu_9/menu_10时的标号,
怎么理解呢?
=======
表面看起来就是定义了 3 个元素:
ViewFunTab[]={ {0,menu_8},{1,menu_9},{2,menu_10} };
这样是不是明了一些?
ViewFunTab 数组有三个元素,
每个元素由一个 ID和一个fun入口 构成,
根据 ID 读取对应的 fun入口进行函数调用, 很好理解么 ...