+ -
当前位置:首页 → 问答吧 → c算法150例!

c算法150例!

时间:2010-11-09

来源:互联网

程序代码(片段):
代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
typedef void (* api_msg_decode)(struct api_msg_msg *msg); /* api_msg_decode定义为指向函数的指针类型 */
static api_msg_decode decode[API_MSG_MAX] = { /* decode为api_msg_decode类型数组,其成员为相应的函数指针 */
    do_newconn,
    do_delconn,
    do_bind,
    do_connect,
    do_disconnect,
    do_listen,
    do_accept,
    do_send,
    do_recv,
    do_write,
    do_close,
};


static void
do_consol_print(struct api_msg_msg *msg)
{
  int i = 0;
  CONSOL_Printf("msg = %x\n",msg);
  for (; i < API_MSG_MAX; i++)
  {
      CONSOL_Printf("decode[%d] = %x\n", i, decode[i]);
  }
  CONSOL_Printf("do_newconn = %x\n"
                  "do_delconn = %x\n"
                  "do_bind = %x\n"
                  "do_connect = %x\n"
                  "do_disconnect = %x\n"
                  "do_listen = %x\n"
                  "do_accept = %x\n"
                  "do_send = %x\n"
                  "do_recv = %x\n"
                  "do_write = %x\n"
                  "do_close = %x\n",
                  do_newconn, do_delconn, do_bind, do_connect, do_disconnect,
                  do_listen, do_accept, do_send, do_recv, do_write, do_close);
  CONSOL_Printf("do_consol_print = %x\n", do_consol_print);
}

 
格式化 0.010 秒, 使用 GeSHi 1.0.8.4


程序执行结果:

代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
msg = 30008cb0

decode[0] = 200c1a

decode[1] = 300c1a

decode[2] = 400c1a

decode[3] = 500c1a

decode[4] = 600c1a

decode[5] = 700c1a

decode[6] = 800c1a

decode[7] = 900c1a

decode[8] = a00c1a

decode[9] = b00c1a

decode[10] = c00c1a

do_newconn = d3c0

do_delconn = d548

do_bind = d694

do_connect = d808

do_disconnect = d9c0

do_listen = da0c

do_accept = dab4

do_send = dacc

do_recv = db24

do_write = db64

do_close = dc40

do_consol_print = dc98
 
格式化 0.005 秒, 使用 GeSHi 1.0.8.4


程序在ADS1.2中编译生成,在32位ARM平台上运行。
问题是:为什么decode[0]的值不等于do_newconn函数指针?
即不能通过decode[0](msg);来实现do_newconn(msg);函数调用。其中msg是struct api_msg_msg *类型,do_newconn的函数原型是
代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
static void do_newconn(struct api_msg_msg *msg);
格式化 0.002 秒, 使用 GeSHi 1.0.8.4
其后的do_*函数类推。这些函数及数据结构在同一个文件中定义。

作者: Jarson   发布时间: 2010-11-09

程序代码(片段):
代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
typedef void (* api_msg_decode)(struct api_msg_msg *msg); /* api_msg_decode定义为指向函数的指针类型 */
static api_msg_decode decode[API_MSG_MAX] = { /* decode为api_msg_decode类型数组,其成员为相应的函数指针 */
    do_newconn,
    do_delconn,
    do_bind,
    do_connect,
    do_disconnect,
    do_listen,
    do_accept,
    do_send,
    do_recv,
    do_write,
    do_close,
};


static void
do_consol_print(struct api_msg_msg *msg)
{
  int i = 0;
  CONSOL_Printf("msg = %x\n",msg);
  for (; i < API_MSG_MAX; i++)
  {
      CONSOL_Printf("decode[%d] = %x\n", i, decode[i]);
  }
  CONSOL_Printf("do_newconn = %x\n"
                  "do_delconn = %x\n"
                  "do_bind = %x\n"
                  "do_connect = %x\n"
                  "do_disconnect = %x\n"
                  "do_listen = %x\n"
                  "do_accept = %x\n"
                  "do_send = %x\n"
                  "do_recv = %x\n"
                  "do_write = %x\n"
                  "do_close = %x\n",
                  do_newconn, do_delconn, do_bind, do_connect, do_disconnect,
                  do_listen, do_accept, do_send, do_recv, do_write, do_close);
  CONSOL_Printf("do_consol_print = %x\n", do_consol_print);
}

 
格式化 0.011 秒, 使用 GeSHi 1.0.8.4


程序执行结果:

代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
msg = 30008cb0

decode[0] = 200c1a

decode[1] = 300c1a

decode[2] = 400c1a

decode[3] = 500c1a

decode[4] = 600c1a

decode[5] = 700c1a

decode[6] = 800c1a

decode[7] = 900c1a

decode[8] = a00c1a

decode[9] = b00c1a

decode[10] = c00c1a

do_newconn = d3c0

do_delconn = d548

do_bind = d694

do_connect = d808

do_disconnect = d9c0

do_listen = da0c

do_accept = dab4

do_send = dacc

do_recv = db24

do_write = db64

do_close = dc40

do_consol_print = dc98
 
格式化 0.005 秒, 使用 GeSHi 1.0.8.4


程序在ADS1.2中编译生成,在32位ARM平台上运行。
问题是:为什么decode[0]的值不等于do_newconn函数指针?
即不能通过decode[0](msg);来实现do_newconn(msg);函数调用。其中msg是struct api_msg_msg *类型,do_newconn的函数原型是
代码: [ 下载 ] [ 隐藏 ]
代码: [ 下载 ] [ 显示 ]
使用 c 语法高亮
static void do_newconn(struct api_msg_msg *msg);
格式化 0.002 秒, 使用 GeSHi 1.0.8.4
其后的do_*函数类推。这些函数及数据结构在同一个文件中定义。

作者: Jarson   发布时间: 2010-11-09