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

时间:2018-09-01 13:09:10

标签: c struct sizeof

我在代码中声明了一组简单的结构。一种  返回的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)时,

16返回值为2

这是怎么回事?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我将键入def 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