c算法150例!
时间:2010-11-09
来源:互联网
程序代码(片段):
程序执行结果:
程序在ADS1.2中编译生成,在32位ARM平台上运行。
问题是:为什么decode[0]的值不等于do_newconn函数指针?
即不能通过decode[0](msg);来实现do_newconn(msg);函数调用。其中msg是struct api_msg_msg *类型,do_newconn的函数原型是
其后的do_*函数类推。这些函数及数据结构在同一个文件中定义。
代码: [ 下载 ] [ 隐藏 ]
使用 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);
}
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
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
作者: Jarson 发布时间: 2010-11-09
程序代码(片段):
程序执行结果:
程序在ADS1.2中编译生成,在32位ARM平台上运行。
问题是:为什么decode[0]的值不等于do_newconn函数指针?
即不能通过decode[0](msg);来实现do_newconn(msg);函数调用。其中msg是struct api_msg_msg *类型,do_newconn的函数原型是
其后的do_*函数类推。这些函数及数据结构在同一个文件中定义。
代码: [ 下载 ] [ 隐藏 ]
使用 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);
}
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
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
作者: Jarson 发布时间: 2010-11-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28