首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >静态int (*const array[SIZE_ARRAY].)(Int a) ={[某事]=某某}在C中是什么意思?

静态int (*const array[SIZE_ARRAY].)(Int a) ={[某事]=某某}在C中是什么意思?
EN

Stack Overflow用户
提问于 2020-04-13 05:21:30
回答 1查看 47关注 0票数 2

我很难解释以下C代码:

代码语言:javascript
运行
复制
static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
    const Netdev *netdev,
    const char *name,
    NetClientState *peer, Error **errp) = {
        [NET_CLIENT_DRIVER_NIC]       = net_init_nic,
#ifdef CONFIG_SLIRP
        [NET_CLIENT_DRIVER_USER]      = net_init_slirp,
#endif
        [NET_CLIENT_DRIVER_TAP]       = net_init_tap,
        [NET_CLIENT_DRIVER_SOCKET]    = net_init_socket,
#ifdef CONFIG_VDE
        [NET_CLIENT_DRIVER_VDE]       = net_init_vde,
#endif
#ifdef CONFIG_NETMAP
        [NET_CLIENT_DRIVER_NETMAP]    = net_init_netmap,
#endif
#ifdef CONFIG_NET_BRIDGE
        [NET_CLIENT_DRIVER_BRIDGE]    = net_init_bridge,
#endif
        [NET_CLIENT_DRIVER_HUBPORT]   = net_init_hubport,
#ifdef CONFIG_VHOST_NET_USER
        [NET_CLIENT_DRIVER_VHOST_USER] = net_init_vhost_user,
#endif
#ifdef CONFIG_L2TPV3
        [NET_CLIENT_DRIVER_L2TPV3]    = net_init_l2tpv3,
#endif
};

这看起来像一个函数指针声明,但是它做了我不认识的= {...}。也在里面做[]

这到底是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 05:26:01

使用类型别名可能更容易理解:

代码语言:javascript
运行
复制
// Define a type-alias for a pointer to a function
typedef int (*net_client_init_fun_type)(const Netdev *, const char *, NetClientState *, Error **);

// Define an array of pointers to functions
static net_client_init_fun_type net_client_init_fun[NET_CLIENT_DRIVER__MAX] = { ... }

它仍然需要有关函数指针以及如何声明/定义它们的知识,但它将使数组声明更易于阅读。

数组初始化列表使用指定的数组初始化

当你有这样的台词时:

代码语言:javascript
运行
复制
[NET_CLIENT_DRIVER_NIC] = net_init_nic

在数组初始化列表中,这意味着数组的索引NET_CLIENT_DRIVER_NIC将初始化为net_init_nic

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61181946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档