结构数组 - sizeof 返回意外结果

array of structures - sizeof returning unexpected result

我在代码中声明了一组简单结构。一种 sizeof() 返回的响应与数组的大小不匹配。有没有其他方法可以声明它以确保正确的 sizeof 响应?

struct control_cmd {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
};

struct control_cmd control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

sizeof(control_cmds) returns 当我期望值 2.

时值 16

怎么回事?

sizeof是内存中的大小,不是元素个数。如果是数组(不是指针!),您可以通过将数组的大小除以单个元素的大小来获得元素的数量,即 sizeof(control_cmds) / sizeof(*control_cmds).

我会 typedef control_cmd_t,将 control_cmds 声明为 control_cmd_t 的数组,然后将两者分开。 (与 Arkku 的回答非常相似)。

#include <stdio.h>

typedef struct control_cmd_t__ {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
} control_cmd_t;

control_cmd_t control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

int main()
{
    printf("sizeof control_cmd_t is: %ld\n", sizeof(control_cmd_t));
    printf("sizeof control_cmds is: %ld\n", sizeof(control_cmds));
    printf("number of elements in control_cmds is: %d", (sizeof(control_cmds)/sizeof(control_cmd_t)));

    return 0;
}

输出:

sizeof control_cmd_t is: 16
sizeof control_cmds is: 32
number of elements in control_cmds is: 2